Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sessions killen(Oracle - C#)

Empfohlene Antworten

Veröffentlicht

Hey, ich arbeite momentan an einem Projekt für ein Unternehmen.

Dort wird Oracle als DBMS eingesetzt.

Soweit so gut, ich habe nun eine Verbindung zur OracleDB aufgebaut und hole mir da alle momentan laufenen Sessions mit dem Befehl:

SELECT * FROM v$session;
Der Befehl zum killen ist mir auch klar:
ALTER SYSTEM KILL SESSION 'SessionID,Serial'
Meine Frage ist jetzt wie ich das an die Datenbank schicke...? Bei mir steht bisher folgendes:(übergabe Parameter sind: das Dataset mit den Sessions, die SessionID und die Serial)

String sql = "ALTER SYSTEM KILL SESSION '?,?';";


OracleCommand cmd = new OracleCommand(sql,con);

            cmd.Parameters.Add("@SID", OracleType.Int32).Value = sid;

            cmd.Parameters.Add("@Serial", OracleType.Int32).Value = serial;


OracleDataAdapter da = new OracleDataAdapter(cmd);

            da.Fill(dat_Session, "Sessions");

Muss ich das mit der Fill() Methode machen? Oder muss ich die Update() Methode aufrufen? Oder ist mein Ansatz komplett falsch?

Danke schonmal im Vorraus,

Grüße

  • Autor

Nachtrag:

Wenn ich das alles mit der Fill() Methode des DataAdapters mache, bekomme ich folgenden Fehler:

ORA-01036: illegal variable name/number

kann damit aber nichts anfangen.

Grüße

  • Autor

Habe das Problem gefunden, bei dem Befehl der zu Oracle geschickt wird darf kein ";" am Ende des Befehls kommen... es müsste also wiefolgt heißen:

String sql = "ALTER SYSTEM KILL SESSION '?,?'";


OracleCommand cmd = new OracleCommand(sql,con);

            cmd.Parameters.Add("@SID", OracleType.Int32).Value = sid;

            cmd.Parameters.Add("@Serial", OracleType.Int32).Value = serial;


OracleDataAdapter da = new OracleDataAdapter(cmd);

            da.Fill(dat_Session, "Sessions");

Grüße

Handelt es sich bei einer Querry um ein Statement, welches in der Regel einen Rückgabewert liefert so nimmt man in der Regel den DataAdapter, welcher die fill Methode implementiert hat zur hand (Da man in der Regel auf das ResultSet zugreifen möchte).

Erwartest du beispielsweise keinen Rückgabewert (delete, update, insert, Create, Alter etc.) so kannst du wie folgt vorgehen:


String sql = "ALTER SYSTEM KILL SESSION '?,?'";


OracleCommand cmd = new OracleCommand(sql,con);

            cmd.Parameters.Add("@SID", OracleType.Int32).Value = sid;

            cmd.Parameters.Add("@Serial", OracleType.Int32).Value = serial;

con.open();

cmd.ExecuteNonQuery();

con.close();

lg

Gateway

Obwohl es mit "Fill" auch ging... hmm^^

Es ist ja auch nichts Falsch daran. Es macht in deinem Fall nur wenig Sinn, da du kein ResultSet erwartest bei deinem Statement. Warum also dann auf Rückgabewert seitens Datenbank prüfen.

Wenn du mit deinem Adapter die Funktion Fill ausführst, führt dieser das ihm übergebene Statement aus und speichert das ResultSet in das/den dafür übergebene/n DataSet/Datatable, auf den du dann Zugreifen kannst um beispielsweise das Ergebnis deiner Selectabfrage zu nutzen.

lg

Gateway

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.