代码之家  ›  专栏  ›  技术社区  ›  mjallday

系统事务隐式事务与我的其他连接混乱

  •  0
  • mjallday  · 技术社区  · 16 年前

    我正在尝试使用System.Transaction.TransactionScope创建一个事务来调用一些存储过程,但它似乎无法在自身之后清除。一旦事务完成(提交或不提交,事务作用域对象被释放),到数据库的后续连接将以serializable的read-commit级别打开,而不是像通常那样以read-committed级别打开。

    每次调用我都要打开和关闭一个连接(很好地关闭并返回到一个连接池,就像.NET中的普通连接一样),当我将连接用于事务时,是否缺少显式重置连接的方法?我认为System.Transaction.TransactionScope背后的想法是隐藏所有的复杂性。

                using (var scope = new TransactionScope())
                {
                    ... make my 3 stored procedure calls ...
    
                    scope.Complete();
    
                    return returnCode;
                }
    

    set transaction isolation level serializable
    

    我还尝试显式地创建Commitabletransaction对象,创建显式的新事务,而不是使用环境事务,但仍然没有成功。

    任何关于如何解决这个问题的想法都会非常感激,因为任何使用可序列化连接的调用如果试图使用readpass锁定提示,都会抛出错误。

    3 回复  |  直到 16 年前
        1
  •  1
  •   gbn    16 年前

    使用 TransactionOptions.IsolationLevel

    default, it's serializable

    TransactionOptions transactionoptions1 = new TransactionOptions();
    transactionoptions1.IsolationLevel = IsolationLevel.ReadCommitted;
    using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionoptions1))
    {
        ... make my 3 stored procedure calls ...
    
        scope.Complete();
    
        return returnCode;
    }
    
        2
  •  0
  •   Marc Gravell    16 年前

    sp_reset_connection )池中相同连接的使用之间;这不会重置隔离级别吗?您是否尝试重新生成可序列化问题(例如,锁升级死锁)

    推荐文章