Datenbankverbindung schließen und Transaktionen

30/08/2007 - 10:50 von Golo Roden | Report spam
Hallo,

ich habe eine Frage zum Schließen einer Datenbankverbindung in
Zusammenhang mit einer über System.Transactions gestarteten Transaktion.

In der MSDN heißt es, dass SqlConnection.Close keinen Einfluss hàtte,
wenn es innerhalb einer von System.Transactions verwalteten Transaktion
aufgerufen wird. Heißt für mich: Die Verbindung wird nicht geschlossen,
was auch logisch wàre, immerhin muss die Transaktion noch Commit oder
Rollback ausführen.

Die Frage ist nur - wann wird die Verbindung denn dann geschlossen?

Was passiert, wenn ich innerhalb eines TransactionScopes eine Verbindung
mit using verwende? Wird das Dispose dann auch nicht aufgerufen? Dürfte
ja eigentlich nicht, aber wann geschieht das dann?

Irgendwie blicke ich da noch nicht so ganz durch ...

Viele Grüße,


Golo
 

Lesen sie die antworten

#1 Golo Roden
30/08/2007 - 11:12 | Warnen spam
Okay ... ich bin ein Schrittchen weiter ...

Close wird schlichtweg ignoriert.
Dispose wird ebenfalls ignoriert.

Statt dessen landet die Verbindung auf einem internen, gesonderten Pool
für noch in Verwendung befindliche, aber eigentlich geschlossene
Verbindungen. Sobald der TransactionScope disposed wird, wird auch
dieser Pool disposed ...

Stellt sich mir nur noch die Frage, wer das wie und wo implementiert ...
der DB Provider? Der TransactionScope? ...?

Golo Roden schrieb:
Hallo,

ich habe eine Frage zum Schließen einer Datenbankverbindung in
Zusammenhang mit einer über System.Transactions gestarteten Transaktion.

In der MSDN heißt es, dass SqlConnection.Close keinen Einfluss hàtte,
wenn es innerhalb einer von System.Transactions verwalteten Transaktion
aufgerufen wird. Heißt für mich: Die Verbindung wird nicht geschlossen,
was auch logisch wàre, immerhin muss die Transaktion noch Commit oder
Rollback ausführen.

Die Frage ist nur - wann wird die Verbindung denn dann geschlossen?

Was passiert, wenn ich innerhalb eines TransactionScopes eine Verbindung
mit using verwende? Wird das Dispose dann auch nicht aufgerufen? Dürfte
ja eigentlich nicht, aber wann geschieht das dann?

Irgendwie blicke ich da noch nicht so ganz durch ...

Viele Grüße,


Golo

Ähnliche fragen