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 Open_EnlistTransaction(Transaction transaction) { ODBC32.RetCode code; if ((this.weakTransaction != null) && this.weakTransaction.IsAlive) { throw ADP.LocalTransactionPresent(); } IDtcTransaction oletxTransaction = ADP.GetOletxTransaction(transaction); OdbcConnectionHandle connectionHandle = this.ConnectionHandle; if (oletxTransaction == null) { code = connectionHandle.SetConnectionAttribute2(ODBC32.SQL_ATTR.SQL_COPT_SS_ENLIST_IN_DTC, IntPtr.Zero, 1); } else { code = connectionHandle.SetConnectionAttribute4(ODBC32.SQL_ATTR.SQL_COPT_SS_ENLIST_IN_DTC, oletxTransaction, 1); } if (code != ODBC32.RetCode.SUCCESS) { this.HandleError(connectionHandle, code); } ((OdbcConnectionOpen)this.InnerConnection).EnlistedTransaction = transaction; }