.NET TransactionScope类和T-SQL TRAN COMMIT和ROLLBACK

时间:2008-10-09 23:02:43

标签: .net database tsql transactions

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

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

4 个答案:

答案 0 :(得分:8)

不,如果您的交易使用TransactionScope,则不需要显式交易 - 但是:重要您应该在连接字符串中设置Transaction Binding=Explicit Unbind;。完整的详细信息是here,但除此之外,您最终可能会收到回滚的最初几个操作,最后几个提交(或者更确切地说,在任何事务之外运行)。

答案 1 :(得分:2)

ON 2005没有必要,在2000年,我会,而且,我通常把交易范围放在“使用”区块。

在2000年及以后与2005年使用时存在一些性能问题。

请参阅here

由于

答案 2 :(得分:1)

如果您加入TransactionScopeCommittableTransaction,我强烈建议您使用begin transaction或{明确创建自己的本地交易 {1}}。

SqlConnection.BeginTransaction / TransactionScope是一个不同的“家庭”,与CommittableTransaction / begin transaction

相互排斥

因此,我不同意Saif Khan。确实,System.Transactions在Sql 2000上存在性能问题,因此最好使用SqlTransaction或SqlTransaction。但是,如果您这样做,那么您也不应该使用TransactionScope / CommittableTransaction。

顺便说一句,Marc Gravell描述的行为在.Net 4.0中已经改变了。即使您不使用显式解除绑定,也不再可能回滚某些命令并提交一些命令。 (但他是正确的,在旧版本中你应该使用Explicit Unbind)。

答案 3 :(得分:0)

您不应该 - 它应该在TransactionScope中处理。它确实取决于你正在做什么以及如何处理事务(显式或隐式)更多HERE