.NET TransactionScope类和T-SQL传输提交和回滚

.NET TransactionScope类和T-SQL传输提交和回滚,.net,database,tsql,transactions,.net,Database,Tsql,Transactions,我目前正在编写一个应用程序,需要对我的业务实体进行多次插入、更新和删除。我使用TransactionScope类来保证所有存储过程都可以作为单个工作单元提交或回滚 我的问题是,如果我正在使用.NET类库中的TransactionScope类,我还需要使用COMMIT TRAN和ROLLBACK TRAN作为我的每个存储过程?您不需要这样做-它应该在TransactionScope中处理。它确实有一点取决于你到底在做什么,以及你如何处理事务(显式或隐式)在2005年,这是没有必要的,在2000年,

我目前正在编写一个应用程序,需要对我的业务实体进行多次插入、更新和删除。我使用TransactionScope类来保证所有存储过程都可以作为单个工作单元提交或回滚


我的问题是,如果我正在使用.NET类库中的TransactionScope类,我还需要使用COMMIT TRAN和ROLLBACK TRAN作为我的每个存储过程?

您不需要这样做-它应该在TransactionScope中处理。它确实有一点取决于你到底在做什么,以及你如何处理事务(显式或隐式)

在2005年,这是没有必要的,在2000年,我通常会将transactionscope放在“使用”块中

与2005年相比,在2000年及更早版本上使用它时存在一些性能问题


谢谢

不,如果在事务中使用TransactionScope,您不需要显式事务-但是:重要您可能应该设置
事务绑定=显式解除绑定。完整的详细信息如下所示,但除此之外,您最终可能会回滚前几个操作,并提交最后几个操作(或者更确切地说,在任何事务之外运行).

如果您登记在
事务范围
提交事务
中,我强烈建议您不要使用
开始事务
SqlConnection.BeginTransaction
显式创建自己的本地事务

TransactionScope
/
committeabletransaction
是一个不同的“家族”,与
begintransaction
/
SqlTransaction

因此,我不同意赛义夫·汗的观点。System.Transactions在Sql 2000上确实存在性能问题,因此最好使用SqlTransaction或
开始事务
。但是,如果这样做,则不应同时使用TransactionScope/CommittableTransaction


顺便说一句,Marc Gravell描述的行为在.Net 4.0中发生了变化。即使不使用显式取消绑定,也不可能回滚某些命令并提交某些命令。(不过,他认为在旧版本中应该使用显式取消绑定是正确的)。

我只处理显式事务。