Veröffentlicht 2. März 201114 j 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
3. März 201114 j 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
3. März 201114 j 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
4. März 201114 j 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
11. März 201114 j Autor Ach so ist das.. Danke für die Antwort, habs gleich mal so geändert. Obwohl es mit "Fill" auch ging... hmm^^ lg
11. März 201114 j 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.