Ich konnte dies noch nirgendwo explizit finden, aber eine Reihe von Beispielen, die ich online gefunden habe, folgen dem, was ich gemacht habe.Schließt ODP.net einen Ref-Cursor, wenn die Verbindung geschlossen wird?
Ich habe eine C# -Klasse, die ODP.net verwendet, um eine Verbindung zu einer Oracle DB herzustellen und eine Prozedur auszuführen, die in einem Paket enthalten ist.
Mein Paket enthält gespeicherte Prozeduren, die einen ref-Cursor-Ausgabeparameter haben. Die ganze Prozedur öffnet den Cursor für eine bestimmte Select-Anweisung.
Wenn ich diese Prozedur direkt auf der Oracle-Datenbank ausführen, dann werde ich schließlich eine maximale Anzahl von offenen Cursorfehler treffen.
Also habe ich mich gefragt, ob ODP.net wirklich diesen Cursor schließt, der in meiner Prozedur geöffnet wurde?
Ich verwende die OracleDataApaper.Fill (DataSet) -Methode.
z.
Ich habe nur Angst, offene Cursor hinten auf der DB ist alles. Wenn jemand Links zu offizieller Dokumentation bereitstellen kann, wäre das großartig!
Updates:
Vielen Dank für die Eingabe. Ich rief an
com.Dispose();
conn.Close();
conn.Dispose();
aber ließ sie aus meinem Beispiel heraus.
Ich fand diesen Forenbeitrag, der besagt, dass die OracleDataAdapter.Fill (Dataset) -Methode den Ref-Cursor freigibt, nachdem die Fill() -Methode ausgeführt wurde.
http://www.frontoracle.com/oracle-archive/140/386140-close-ref-cursor.html
Ich wünsche, die Oracle-Dokumentation deutlicher war allerdings, diesen Prozess zu beschreiben.
Ich würde hinzufügen OracleDataReader der Liste der Objekte zu entsorgen, wenn Sie verwenden Sie scheint unser Problem der "maximalen offenen Cursor" gelöst zu haben. – Fueled