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(); }