internal override void ExecuteTransaction(SqlInternalConnection.TransactionRequest transactionRequest, string transactionName, System.Data.IsolationLevel iso, SqlInternalTransaction internalTransaction, bool isDelegateControlRequest)
        {
            if (Bid.AdvancedOn)
            {
                Bid.Trace("<sc.SqlInternalConnectionSmi.ExecuteTransaction|ADV> %d#, transactionRequest=%ls, transactionName='%ls', isolationLevel=%ls, internalTransaction=#%d transactionId=0x%I64x.\n", base.ObjectID, transactionRequest.ToString(), (transactionName != null) ? transactionName : "null", iso.ToString(), (internalTransaction != null) ? internalTransaction.ObjectID : 0, (internalTransaction != null) ? internalTransaction.TransactionId : 0L);
            }
            switch (transactionRequest)
            {
                case SqlInternalConnection.TransactionRequest.Begin:
                    try
                    {
                        this._pendingTransaction = internalTransaction;
                        this._smiConnection.BeginTransaction(transactionName, iso, this._smiEventSink);
                        goto Label_0121;
                    }
                    finally
                    {
                        this._pendingTransaction = null;
                    }
                    break;

                case SqlInternalConnection.TransactionRequest.Promote:
                    base.PromotedDTCToken = this._smiConnection.PromoteTransaction(this._currentTransaction.TransactionId, this._smiEventSink);
                    goto Label_0121;

                case SqlInternalConnection.TransactionRequest.Commit:
                    break;

                case SqlInternalConnection.TransactionRequest.Rollback:
                case SqlInternalConnection.TransactionRequest.IfRollback:
                    this._smiConnection.RollbackTransaction(this._currentTransaction.TransactionId, transactionName, this._smiEventSink);
                    goto Label_0121;

                case SqlInternalConnection.TransactionRequest.Save:
                    this._smiConnection.CreateTransactionSavePoint(this._currentTransaction.TransactionId, transactionName, this._smiEventSink);
                    goto Label_0121;

                default:
                    goto Label_0121;
            }
            this._smiConnection.CommitTransaction(this._currentTransaction.TransactionId, this._smiEventSink);
        Label_0121:
            this._smiEventSink.ProcessMessagesAndThrow();
        }