TransactionScope错误地提交事务

时间:2011-11-30 19:20:07

标签: sql-server-2008 .net-4.0 transactionscope

我的DAL中有以下方法:

public void SavePlan()
{
    using (TransactionScope scope =
           new TransactionScope(TransactionScopeOption.RequiresNew))
    {
        CallSaveDataProc();
        CallLogMsgProc();
        scope.Complete();
    }
}

我故意在CallLogMsgProc中放置COMMIT事务而不创建事务。这导致从SQLException过程抛出CallLogMsgProc并且scope.Complete()永远不会执行。

但是,在我的数据库中,我仍然看到第一种方法CallSaveDataProc保存的记录。我做错了吗?

1 个答案:

答案 0 :(得分:0)

启动/提交事务必须配对,并且最好每个对在理想情况下应该在相同的范围内(尽管每对不必与另一对在同一范围内)。

因此,您可以通过新的TransactionScope开始交易,然后在您的存储过程中Commit(正如您所见)TransactionScope,然后是尝试提交由{{1}}“看到”的交易,该交易现已无效。