C# 如何知道事务范围是否成功

C# 如何知道事务范围是否成功,c#,C#,我需要知道我的事务范围是否成功。就好像记录是否能够保存在数据库中一样 注意:我在服务层中有这个作用域,我不希望包含Try-Catch块 bool txExecuted; using (var tx = new TransactionScope()) { //code // 1 SAVING RECORDS IN DB // 2 SAVING RECORDS IN DB tx.Complete(); txExecuted = true; } if (txExec

我需要知道我的事务范围是否成功。就好像记录是否能够保存在数据库中一样

注意:我在服务层中有这个作用域,我不希望包含Try-Catch块

bool txExecuted;

using (var tx = new TransactionScope())
{
   //code
   // 1 SAVING RECORDS IN DB
   // 2 SAVING RECORDS IN DB

   tx.Complete();
   txExecuted = true;
}

if (txExecuted ) {

   // SAVED SUCCESSFULLY
} else {
  // NOT SAVED. FAILED
}

注释后的代码将进行更新,可能会使用ExecuteOnQuery()实现-这将返回受影响行数的int。跟踪所有返回值以了解有多少行受到影响

整个事务在完成时要么成功,要么经历异常。如果未遇到异常,则表示事务成功。如果发生异常,则事务的某些部分失败;这一切都没有发生

通过考虑这两个事实(记录受影响计数、事务异常或否),您可以知道保存是否有效以及有多少行受到影响

我不太理解txecuted的用途——如果发生异常,将永远不会设置它,也永远不会考虑if。这样运行的唯一代码是if(true)中的内容。我不明白你怎么能决定不使用try/catch,而希望用一个系统做任何有用的事情,这个系统可以在出现问题时抛出异常;你说你不想捕获异常并不能阻止异常的发生,也不会影响程序的控制流。很明显,调用该方法只表示范围内的所有操作都已成功完成

但是,您还应该注意,调用此方法不会 保证事务的提交。这只是一种通知的方式 您的状态的事务管理器。调用此方法后,您可以 无法再通过当前属性访问环境事务, 尝试这样做会导致抛出异常

资源管理器之间提交的实际工作发生在 如果TransactionScope对象创建了 交易

由于您使用的是ADO.NET,因此将返回受影响的行数。您可以在使用块的提交和外部执行数据库查找

在我看来,不尝试是错误的。您希望捕获异常中的日志

try
{
    using (var scope = new TransactionScope())
    {
        using (var conn = new SqlConnection("connection string"))
        {

        }

        // The Complete method commits the transaction. If an exception has been thrown,
        // Complete is not  called and the transaction is rolled back.
        scope.Complete();
    }
}
catch (TransactionAbortedException ex)
{
    // log
}

您是否使用标准ADO.NET和SQL server?dotnet core和SQL server