这个问题与我的问题有关:SQL Server and TransactionScope (with MSDTC): Sporadically can't get connection
我正在使用 .net 进行一些事务编程 TransactionScope
类(class)。如果我理解正确,我可以通过将 SQL 调用包装在 using ts as new TransactionScope()
中来在事务中执行一些 SQL 操作。阻止,或使用 new TransactionScope()
然后 TransactionScope.Dispose()
在末尾。
要提交事务,MSDN 说使用 TransactionScope.Commit()
.假设我想在某些情况下回滚事务,只需调用TransactionScope.Dispose()
就可以了不先调用 Commit 方法?这是好的做法,还是应该以其他方式完成?
最佳答案
如果您知道要回滚,则明确地执行此操作。你不能保证 Dispose 会回滚(在调用了 complete 的情况下,当你调用 Dispose 时事务会被提交)
对于您关于使用或新建/处置的问题,它们并不等同
using(var ts = new TransactionScope())
{
}
相当于
TransactionScope ts;
try
{
ts = new TransactionScope();
}
finally
{
ts.Dispose();
}
回答您的后续问题不,如果您调用 Dispose,您将不会让您的事务“徘徊”,它将提交或回滚。但是,如果您在编写它时使用 new/dispose(没有 finally 块),您可能会遇到一种情况,即当您期望它时(在异常情况下)不调用 dispose
关于.net - 回滚 .net 事务的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085574/