繁体   English   中英

TransactionScope检查事务是否提交成功

[英]TransactionScope check if transaction commited ok

您好,有没有一种方法可以检查使用TransactionScope的事务是否已提交或回滚?

在处理TransactionScope之前,不会发生实际的提交。 如果提交由于任何原因失败,则将引发异常。 您应该捕获该异常,并将失败事务的逻辑放入Catch块中。 如果没有抛出异常,则应确保Commit成功。 如果出于我无法想到的任何原因,您不信任该框架,则可以始终创建另一个Scope并查询结果以确保已应用它们。

var transactionFailed = false;
try
{
    using (var tx = new TransactionScope())
    {
        tx.Complete();
    }
}
catch (TransactionAbortedException ex)
{
    transactionFailed = true;
    writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);

}
catch (ApplicationException ex)
{
    transactionFailed = true;
    writer.WriteLine("ApplicationException Message: {0}", ex.Message);
}
catch (Exception ex)
{
    transactionFailed = true;
    writer.WriteLine("Exception Message: {0}", ex.Message);
}

是。 只需添加一个变量并检查它。

bool txExecuted;

using (var tx = new TransactionScope())
{
 //code
 if (code was OK)
 {
   tx.Complete();
   txExecuted = true;
 }

}

关于msdn文档https://msdn.microsoft.com/zh-cn/library/system.transactions.transactionscope.complete(v=vs.110).aspx

// Complete方法提交事务。 如果引发了异常,
//不调用Complete,事务将回滚。

仅在成功完成transactionScope.Complete()方法执行后,才会调用completeCallback方法

因此,您可以使用功能:

public bool TryRunTransaction(Action transactionAction)
    {
        try
        {
            using (var transactionScope = new TransactionScope())
            {
                transactionAction();
                transactionScope.Complete();
            }
            return true;
        }
        catch (TransactionAbortedException)
        {
            return false;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM