Angenommen, eine gespeicherte Prozedur auf MSSQL Server verwendet eine SQL-Transaktion mit BEGIN TRANSACTION/COMMIT TRANSACTION
, wie unterscheidet sich das von Anfang und Commit eines mit ADO.NET über SqlConnection.BeginTransaction()
?Was ist der Unterschied zwischen einer SQL-Transaktion auf der Ebene der gespeicherten Prozedur und einer SQL-Verbindung auf der Ebene der SQL-Verbindung?
Antwort
Für ADO.NET ist es kein Unterschied. Es ist implizit in MSDN angegeben, wo für SqlTransaction-Objekt die Commit-Methode "fehlschlägt, wenn die Transaktion bereits auf dem Server zurückgesetzt wurde".
Außerdem zeigt SQL Server Profiler "SET TRANSACTION ISOLATION EBENE READ COMMITTED; BEGIN TRAN" an, sobald Sie .BeginTransaction für eine Verbindung ausführen.
Für ADO (nicht .NET) ist es jedoch nicht. Das ermöglichte nette Szenarien mit effektiv verschachtelten Transaktionen (Server-Transaktionen wurden in Client-Transaktionen verschachtelt). Obwohl ich das oft benutzt habe, kann ich nicht genau definieren, was eine "Kundentransaktion" in diesem Fall war.
Wenn Sie mehrere gespeicherte Prozeduren nacheinander aufrufen und ein Rollback durchführen möchten, müssen Sie die Transaktion mithilfe von SqlConnection.BeginTransaction() aus Ihrem Code verwalten. Ansonsten ist es dasselbe.