internal OleDbTransaction ValidateTransaction(OleDbTransaction transaction, string method) { if (this.weakTransaction != null) { OleDbTransaction target = (OleDbTransaction)this.weakTransaction.Target; if ((target != null) && this.weakTransaction.IsAlive) { target = OleDbTransaction.TransactionUpdate(target); } if (target != null) { if (transaction == null) { throw ADP.TransactionRequired(method); } OleDbTransaction transaction3 = OleDbTransaction.TransactionLast(target); if (transaction3 == transaction) { return(transaction); } if (transaction3.Connection != transaction.Connection) { throw ADP.TransactionConnectionMismatch(); } throw ADP.TransactionCompleted(); } this.weakTransaction = null; } else if ((transaction != null) && (transaction.Connection != null)) { throw ADP.TransactionConnectionMismatch(); } return(null); }
internal OleDbTransaction ValidateTransaction(OleDbTransaction transaction, string method) { if (null != this.weakTransaction) { OleDbTransaction head = (OleDbTransaction)this.weakTransaction.Target; if ((null != head) && this.weakTransaction.IsAlive) { head = OleDbTransaction.TransactionUpdate(head); // either we are wrong or finalize was called and object still alive Debug.Assert(null != head, "unexcpted Transaction state"); } // else transaction has finalized on user if (null != head) { if (null == transaction) { // valid transaction exists and cmd doesn't have it throw ADP.TransactionRequired(method); } else { OleDbTransaction tail = OleDbTransaction.TransactionLast(head); if (tail != transaction) { if (tail.Connection != transaction.Connection) { throw ADP.TransactionConnectionMismatch(); } // else cmd has incorrect transaction throw ADP.TransactionCompleted(); } // else cmd has correct transaction return(transaction); } } else // cleanup for Finalized transaction { this.weakTransaction = null; } } else if ((null != transaction) && (null != transaction.Connection)) // MDAC 72706 { throw ADP.TransactionConnectionMismatch(); } // else no transaction and cmd is correct // MDAC 61649 // if transactionObject is from this connection but zombied // and no transactions currently exists - then ignore the bogus object return(null); }