internal void Open_EnlistTransaction(SysTx.Transaction transaction) { OdbcConnection.VerifyExecutePermission(); if ((null != this.weakTransaction) && this.weakTransaction.IsAlive) { throw ADP.LocalTransactionPresent(); } SysTx.IDtcTransaction oleTxTransaction = ADP.GetOletxTransaction(transaction); OdbcConnectionHandle connectionHandle = ConnectionHandle; ODBC32.RetCode retcode; if (null == oleTxTransaction) { retcode = connectionHandle.SetConnectionAttribute2(ODBC32.SQL_ATTR.SQL_COPT_SS_ENLIST_IN_DTC, (IntPtr)ODBC32.SQL_DTC_DONE, ODBC32.SQL_IS_PTR); } else { retcode = connectionHandle.SetConnectionAttribute4(ODBC32.SQL_ATTR.SQL_COPT_SS_ENLIST_IN_DTC, oleTxTransaction, ODBC32.SQL_IS_PTR); } if (retcode != ODBC32.RetCode.SUCCESS) { HandleError(connectionHandle, retcode); } // Tell the base class about our enlistment ((OdbcConnectionOpen)InnerConnection).EnlistedTransaction = transaction; }
internal void EnlistTransactionInternal(SysTx.Transaction transaction) { OleDbConnection.VerifyExecutePermission(); SysTx.IDtcTransaction oleTxTransaction = ADP.GetOletxTransaction(transaction); IntPtr hscp; Bid.ScopeEnter(out hscp, "<oledb.ITransactionJoin.JoinTransaction|API|OLEDB> %d#\n", ObjectID); try { using (ITransactionJoinWrapper transactionJoin = ITransactionJoin()) { if (null == transactionJoin.Value) { throw ODB.TransactionsNotSupported(Provider, (Exception)null); } transactionJoin.Value.JoinTransaction(oleTxTransaction, (int)IsolationLevel.Unspecified, 0, IntPtr.Zero); _unEnlistDuringDeactivate = (null != transaction); } } finally { Bid.ScopeLeave(ref hscp); } EnlistedTransaction = transaction; }