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

时间:2009-06-25 20:29:08

标签: .net sql-server ado.net transactions

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

2 个答案:

答案 0 :(得分:3)

对于ADO.NET,它没有区别。它在MSDN中隐式声明,对于SqlTransaction对象,如果事务已经在服务器上回滚,则称Commit方法“失败。”

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

然而,对于ADO(不是.NET),它不是。这曾经允许有效的嵌套事务(服务器trans嵌套在客户端内)的好方案。尽管我已经使用了很多,但在这种情况下,我无法确切地定义“客户交易”是什么。

答案 1 :(得分:2)

如果要连续调用多个存储过程并且希望能够回滚,则必须使用SqlConnection.BeginTransaction()从代码管理事务。否则它是一样的。