2017-03-23 1 views
0

Ich habe den Transaktionsbereich in einer Web-API-Anwendung implementiert. Es funktioniert gut, wenn ich alles festsetzen oder alles zurücksetzen muss. Aber manchmal, während des Debuggens, wenn ich den Service stoppe, bevor die Transaktion abgeschlossen ist, wird die Transaktion gesperrt. Die Tabelle wird weiterhin als gesperrt angezeigt, und diese bestimmte Sitzung verbleibt auch nach dem Schließen des visuellen Studios in der Datenbank. Das passiert irgendwann und diese teilweise Transaktion wird nicht rückgängig gemacht. Ich habe auch eine Zeitüberschreitung für den Transaktionsbereich festgelegt. Noch ist das Problem passiert. Gibt es trotzdem einen Abbruch der Tabellenoperation unmittelbar nachdem die Verbindung unterbrochen wurde?ADO .NET-Transaktionsbereich sperrt Transaktionen auch nach dem Stoppen

Antwort

0

Müssen Sie TransactionScope verwenden? Wenn nicht, können Sie mit der SqlTransaction suchen, die an die Verbindung gebunden ist.

Details

Wenn die Netzverbindung des Client auf eine Instanz der Datenbank Engine ist gebrochen, alle noch ausstehenden Transaktionen für die Verbindung sind zurückgerollt, wenn das Netzwerk die Instanz der Pause benachrichtigt. Wenn nicht die Client-Anwendung oder wenn der Client-Computer ausfällt oder ist neu gestartet, das bricht auch die Verbindung, und die Instanz der Database Engine rollt wieder alle noch ausstehende Verbindungen, wenn das Netzwerk es der Pause benachrichtigt. Wenn der Client die Anwendung abmeldet, werden ausstehende Transaktionen zurückgesetzt.

using (SqlConnection cn = new SqlConnection("YOUR CONNECTION")) 
{ 
    cn.Open(); 
    using (SqlTransaction tr = cn.BeginTransaction()) 
    { 
     // your transactional code 
     tr.Commit(); 
    } 
} 
Verwandte Themen