Zum Inhalt springen

Sessions killen(Oracle - C#)


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...