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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...