存储过程级别的SQL事务与SqlConnection级别的SQL事务之间有什么区别?

Jon*_*ney 6 .net sql-server ado.net transactions

假设MSSQL Server上的存储过程使用了一个SQL事务BEGIN TRANSACTION/COMMIT TRANSACTION,这与开始和使用ADO.NET通过提交一个有SqlConnection.BeginTransaction()什么不同?

GSe*_*erg 3

对于 ADO.NET 来说,没有区别。MSDN 中隐含地指出,对于 SqlTransaction 对象,Commit 方法被认为“如果事务已在服务器上回滚,则失败”。

此外,一旦您在连接上执行 .BeginTransaction,SQL Server Profiler 就会显示“SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRAN”。

然而,对于 ADO(不是 .NET)来说,情况并非如此。这曾经允许有效的嵌套事务的良好场景(服务器事务嵌套在客户端事务内)。尽管我经常使用它,但我无法准确定义这种情况下的“客户端事务”是什么。