Exemplo n.º 1
0
        internal void Zombie()
        {
            // Called by several places in the code to ensure that the outer
            // transaction object has been zombied and the parser has broken
            // it's reference to us.

            // NOTE: we'll be called from the TdsParser when it gets appropriate
            // ENVCHANGE events that indicate the transaction has completed, however
            // we cannot rely upon those events occurring in the case of pre-Yukon
            // servers (and when we don't go to the wire because the connection
            // is broken) so we can also be called from the Commit/Rollback/Save
            // methods to handle that case as well.

            // There are two parts to a full zombie:
            // 1) Zombie parent and disconnect outer transaction from internal transaction
            // 2) Disconnect internal transaction from connection and parser
            // Number 1 needs to be done whenever a SqlTransaction object is completed.  Number
            // 2 is only done when a transaction is actually completed.  Since users can begin
            // transactions both in and outside of the API, and since nested begins are not actual
            // transactions we need to distinguish between #1 and #2.

            ZombieParent();

            SqlInternalConnection innerConnection = _innerConnection;

            _innerConnection = null;

            if (null != innerConnection)
            {
                innerConnection.DisconnectTransaction(this);
            }
        }
Exemplo n.º 2
0
        internal void Zombie()
        {
            this.ZombieParent();
            SqlInternalConnection connection = this._innerConnection;

            this._innerConnection = null;
            if (connection != null)
            {
                connection.DisconnectTransaction(this);
            }
        }