2013-02-20 128 views
0

我想在另一个TransactionScope中包装两个TransactionScopes,但是当我运行该程序并在第二个事务作用域中触发错误时,第一个事务不会回滚。是否有可能回滚两个,还是我最好做其他事情?由于TransactionScope在表中锁定了行,我不得不将它们分开,并且不能正常工作。嵌套的TransactionScope回滚 - 可能吗?

Using objTransaction As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew, New TimeSpan(0, 10, 0)) 

    Using objTransaction As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew, New TimeSpan(0, 10, 0)) 
    'Scope - 1 
    End Using 

    Using objTransaction As New Transactions.TransactionScope(Transactions.TransactionScopeOption.RequiresNew, New TimeSpan(0, 10, 0)) 
    'Scope - 2 
    End Using 

End Using 
+0

不知道这是你在交易范围在做什么,你能不能简单地窝在第一第二交易?由于您的代码当前有效,因此在输入第二个事务之前,您将退出第一个事务的范围,这意味着第一个事务由于已经提交而无法回滚。只是一个想法 - 我不是DBA,我没有做过很多交易。 – Tim 2013-02-20 18:19:41

回答

2

您正在使用错误的事务处理作用域选项。要让您的内部TransactionScopes在父范围内登记,您需要使用TransactionScopeOption.Required。

当您使用TransactionScopeOption of Required时,它将在环境事务中登记(如果存在)。当您使用RequiredNew时,它不会登记在环境事务中。

A great article explaining the differences is here