For ADO.NET, this does not matter. This is implicitly specified in MSDN, where for the SqlTransaction object, the Commit method is called "fail if the transaction is already rolling back on the server."
In addition, the SQL Server Profiler shows "SET THE INSULATION LEVEL OF BET OPERATIONS, STARTING, START TRAN" as soon as you execute .BeginTransaction when connecting.
However, for ADO (not .NET) this is not the case. This was used to provide good scenarios with efficient nested transactions (server trance was nested inside client ones). Despite the fact that I used this a lot, I can’t determine exactly what a “client transaction” is in this case.
GSerg
source share