【问题标题】:Transaction scope function事务范围函数
【发布时间】:2011-10-28 09:59:18
【问题描述】:

我正在使用下面的代码来应用事务范围

TransactionOptions transOption = new TransactionOptions();
transOption.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transOption))
{
  //Code to delete    
  //Code to insert

  scope.Complete();
}

如果我在插入时出现错误,则范围不起作用,记录将被删除而不是回滚

【问题讨论】:

  • 你能展示你用来删除的代码吗?告诉我们你正在使用的数据库服务器吗?
  • 如果您插入一条记录...并且出现错误...它被删除但没有回滚...您确定您没有查看已插入的记录,并且那么事务正在回滚??回滚将“删除”它。

标签: c# transactionscope


【解决方案1】:

您需要告诉我们您使用的是哪个数据库服务器。以及是否收到任何异常消息

不管怎样,代码看起来是正确的,你检查过 (MSDTC) 吗?检查它是否在您的操作系统上启用。

【讨论】:

    【解决方案2】:

    http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx 状态:

    TransactionScope.Complete() 表示范围内的所有操作都成功完成。

    因此,除非您的“要插入的代码”抛出终止 Using 块的异常,否则您的代码始终会调用 scope.Complete() 并提交您的数据库更改。

    如果您的“要删除的代码”和“要插入的代码”在内部处理异常,那么它们需要将信息返回到您的 Using 块以指示一切是否正常。例如,假设您的“代码”块是方法调用,如果全部正常则返回 true,如果失败则返回 false,您可以编写:

    bool allGood;
    
    allGood = CodeToDelete();
    
    if(allGood)
    {
      allGood = CodeToInsert();
    }
    
    if(allGood)
    {
      scope.Complete();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 2010-11-03
      相关资源
      最近更新 更多