Пример #1
0
        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;
        }
Пример #2
0
        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;
        }