Termi Geschrieben 2. März 2011 Teilen Geschrieben 2. März 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Termi Geschrieben 3. März 2011 Autor Teilen Geschrieben 3. März 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Termi Geschrieben 3. März 2011 Autor Teilen Geschrieben 3. März 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gateway_man Geschrieben 4. März 2011 Teilen Geschrieben 4. März 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Termi Geschrieben 11. März 2011 Autor Teilen Geschrieben 11. März 2011 Ach so ist das.. Danke für die Antwort, habs gleich mal so geändert. Obwohl es mit "Fill" auch ging... hmm^^ lg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gateway_man Geschrieben 11. März 2011 Teilen Geschrieben 11. März 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.