zoukankan      html  css  js  c++  java
  • 为什么SqlTransaction.Rollback会抛出SqlException(11,-2)(即SQL超时异常)

    // System.Data.SqlClient.SqlTransaction
    public override void Rollback()
    {
        if (this.IsYukonPartialZombie)
        {
            if (Bid.AdvancedOn)
            {
                Bid.Trace("<sc.SqlTransaction.Rollback|ADV> %d# partial zombie no rollback required "this.ObjectID);
            }
            this._internalTransaction = null;
            return;
        }
        this.ZombieCheck();
        SqlStatistics statistics = null;
        IntPtr intPtr;
        Bid.ScopeEnter(out intPtr, "<sc.SqlTransaction.Rollback|API> %d#"this.ObjectID);
        SNIHandle target = null;
        RuntimeHelpers.PrepareConstrainedRegions();
        try
        {
            target = SqlInternalConnection.GetBestEffortCleanupTarget(this._connection);
            statistics = SqlStatistics.StartTimer(this.Statistics);
            this._isFromAPI = true;
            this._internalTransaction.Rollback();
        }
        catch (OutOfMemoryException e)
        {
            this._connection.Abort(e);
            throw;
        }
        catch (StackOverflowException e2)
        {
            this._connection.Abort(e2);
            throw;
        }
        catch (ThreadAbortException e3)
        {
            this._connection.Abort(e3);
            SqlInternalConnection.BestEffortCleanup(target);
            throw;
        }
        finally
        {
            this._isFromAPI = false;
            SqlStatistics.StopTimer(statistics);
            Bid.ScopeLeave(ref intPtr);
        }
    }

    // System.Data.SqlClient.SqlInternalTransaction
    internal void Rollback()
    {
        IntPtr intPtr;
        Bid.ScopeEnter(out intPtr, "<sc.SqlInternalTransaction.Rollback|API> %d#"this.ObjectID);
        if (this._innerConnection.IsLockedForBulkCopy)
        {
            throw SQL.ConnectionLockedForBcpEvent();
        }
        this._innerConnection.ValidateConnectionForExecute(null);
        try
        {
            this._innerConnection.ExecuteTransaction(SqlInternalConnection.TransactionRequest.IfRollback, null, IsolationLevel.Unspecified, nullfalse);
            this.Zombie();
        }
        catch (Exception e)
        {
            if (!ADP.IsCatchableExceptionType(e))
            {
                throw;
            }
            this.CheckTransactionLevelAndZombie();
            if (!this._disposing)
            {
                throw;
            }
        }
        finally
        {
            Bid.ScopeLeave(ref intPtr);
        }
    }

    // System.Data.SqlClient.SqlInternalConnectionTds
    internal override void ExecuteTransaction(SqlInternalConnection.TransactionRequest transactionRequest, string name, IsolationLevel iso, SqlInternalTransaction internalTransaction, bool isDelegateControlRequest)
    {
        if (base.IsConnectionDoomed)
        {
            if (transactionRequest == SqlInternalConnection.TransactionRequest.Rollback || transactionRequest == SqlInternalConnection.TransactionRequest.IfRollback)
            {
                return;
            }
            throw SQL.ConnectionDoomed();
        }
        else
        {
            if ((transactionRequest == SqlInternalConnection.TransactionRequest.Commit || transactionRequest == SqlInternalConnection.TransactionRequest.Rollback || transactionRequest == SqlInternalConnection.TransactionRequest.IfRollback) && !this.Parser.MARSOn && this.Parser._physicalStateObj.BcpLock)
            {
                throw SQL.ConnectionLockedForBcpEvent();
            }
            string transactionName = (name == null) ? string.Empty : name;
            if (!this._parser.IsYukonOrNewer)
            {
                this.ExecuteTransactionPreYukon(transactionRequest, transactionName, iso, internalTransaction);
                return;
            }
            this.ExecuteTransactionYukon(transactionRequest, transactionName, iso, internalTransaction, isDelegateControlRequest);
            return;
        }
    }

  • 相关阅读:
    Java学习第一课:搭建Eclipse+MyEclipse+Tomcat
    XFire 与 JAXWS的区别 GlassFish是Java EE 5的开源实现其中包括JAXWS
    在MyEclipse6.5上开发JAXWS web服务
    adobe acrobat professional8 .0 激活方法实施过程 记录
    MySQL MYSQL_ROW 返回的字段若是 float 如何在 C++程序中 把 字段值赋给 一个 float变量
    Arrays.sort 不区分大小写 排序
    Arrays.sort 不区分字母大小写 排序
    Applet与Servlet通讯的四种方法及其比较
    Arrays.sort 不区分大小写字母 Comparable
    利用 Arrays.sort 字符串 进行排序 完全按字符 排序 忽略字符大小写
  • 原文地址:https://www.cnblogs.com/hubo0831/p/3368508.html
Copyright © 2011-2022 走看看