Beispiel #1
0
        // Get the Descriptor Handle for the current statement
        //
        internal HandleRef GetDescriptorHandle()
        {
            if (_hdesc != IntPtr.Zero)
            {
                return(new HandleRef(this, _hdesc));
            }
            Debug.Assert((_cmdWrapper != null), "Must have the wrapper object!");
            Debug.Assert((_cmdWrapper._stmt != IntPtr.Zero), "Must have statement handle when calling GetDescriptorHandle");
            Debug.Assert((_cmdWrapper._dataReaderBuf != null), "Must have dataReader buffer when calling GetDescriptorHandle");

            int cbActual = 0;   // Dummy value

            ODBC32.RETCODE retcode = (ODBC32.RETCODE)
                                     UnsafeNativeMethods.Odbc32.SQLGetStmtAttrW(
                _cmdWrapper,
                (int)ODBC32.SQL_ATTR.APP_PARAM_DESC,
                _cmdWrapper._dataReaderBuf,
                IntPtr.Size,
                out cbActual);


            if (ODBC32.RETCODE.SUCCESS != retcode)
            {
                _connection.HandleError(_cmdWrapper, ODBC32.SQL_HANDLE.STMT, retcode);
            }
            _hdesc = Marshal.ReadIntPtr(_cmdWrapper._dataReaderBuf.Ptr, 0);
            return(new HandleRef(this, _hdesc));
        }
        /*public OdbcCommand CreateCommand() { // MDAC 68309
         *  OdbcCommand cmd = Connection.CreateCommand();
         *  cmd.Transaction = this;
         *  return cmd;
         * }
         *
         * IDbCommand IDbTransaction.CreateCommand() {
         *  return CreateCommand();
         * }*/

        /// <include file='doc\OdbcTransaction.uex' path='docs/doc[@for="OdbcTransaction.Commit"]/*' />
        public void Commit()
        {
            OdbcConnection.OdbcPermission.Demand(); // MDAC 81476

            if (null == this.connection)
            {
                throw ADP.TransactionZombied(this);
            }
            connection.CheckState(ADP.CommitTransaction); // MDAC 68289

            //Note: SQLEndTran success if not actually in a transaction, so we have to throw
            //since the IDbTransaciton spec indicates this is an error for the managed packages
            if (AutoCommit)
            {
                throw ODC.NotInTransaction();
            }

            //Commit the transaction (for just this connection)
            ODBC32.RETCODE retcode = (ODBC32.RETCODE)
                                     UnsafeNativeMethods.Odbc32.SQLEndTran(
                (short)ODBC32.SQL_HANDLE.DBC,
                this.connection._dbcWrapper,
                (Int16)ODBC32.SQL_TXN.COMMIT);
            if (retcode != ODBC32.RETCODE.SUCCESS)
            {
                this.connection.HandleError(this.connection._dbcWrapper, ODBC32.SQL_HANDLE.DBC, retcode);
            }

            //Transaction is complete...
            AutoCommit = true;
            this.connection.weakTransaction = null;
            this.connection._dbcWrapper._isInTransaction = false;
            this.connection = null;
        }
 private OdbcException(SerializationInfo si, StreamingContext sc) : base(si, sc)
 {
     this.odbcErrors = new OdbcErrorCollection();
     this._retcode   = (ODBC32.RETCODE)si.GetValue("odbcRetcode", typeof(ODBC32.RETCODE));
     this.odbcErrors = (OdbcErrorCollection)si.GetValue("odbcErrors", typeof(OdbcErrorCollection));
     base.HResult    = -2146232009;
 }
 private OdbcException(SerializationInfo si, StreamingContext sc) : base(si, sc)
 {
     this.odbcErrors = new OdbcErrorCollection();
     this._retcode = (ODBC32.RETCODE) si.GetValue("odbcRetcode", typeof(ODBC32.RETCODE));
     this.odbcErrors = (OdbcErrorCollection) si.GetValue("odbcErrors", typeof(OdbcErrorCollection));
     base.HResult = -2146232009;
 }
        /// <include file='doc\OdbcTransaction.uex' path='docs/doc[@for="OdbcTransaction.Rollback"]/*' />
        public void Rollback()
        {
            if (null == this.connection)
            {
                throw ADP.TransactionZombied(this);
            }
            connection.CheckState(ADP.RollbackTransaction); // MDAC 68289

            //Note: SQLEndTran success if not actually in a transaction, so we have to throw
            //since the IDbTransaciton spec indicates this is an error for the managed packages
            if (AutoCommit)
            {
                throw ODC.NotInTransaction();
            }

            try { // try-finally inside try-catch-throw
                try {
                    //Abort the transaction (for just this connection)
                    ODBC32.RETCODE retcode = (ODBC32.RETCODE)
                                             UnsafeNativeMethods.Odbc32.SQLEndTran(
                        (short)ODBC32.SQL_HANDLE.DBC,
                        this.connection._dbcWrapper,
                        (Int16)ODBC32.SQL_TXN.ROLLBACK);
                    if (retcode != ODBC32.RETCODE.SUCCESS)
                    {
                        this.connection.HandleError(this.connection._dbcWrapper, ODBC32.SQL_HANDLE.DBC, retcode);
                    }

                    //Transaction is complete...
                    AutoCommit = true;
                }
                finally {
                    this.connection.weakTransaction = null;
                    this.connection._dbcWrapper._isInTransaction = false;
                    this.connection = null;
                }
            }
            catch { // MDAC 81875
                throw;
            }
        }
 // runtime will call even if private...
 // <fxcop ignore=SerializableTypesMustHaveMagicConstructorWithAdequateSecurity />
 private OdbcException(SerializationInfo si, StreamingContext sc) : base(si, sc)
 {
     _retcode   = (ODBC32.RETCODE)si.GetValue("odbcRetcode", typeof(ODBC32.RETCODE));
     odbcErrors = (OdbcErrorCollection)si.GetValue("odbcErrors", typeof(OdbcErrorCollection));
 }
 internal OdbcException(OdbcErrorCollection errors, ODBC32.RETCODE retcode)
 {
     odbcErrors = errors;
     _retcode   = retcode;
 }
Beispiel #8
0
 static internal Exception CantAllocateEnvironmentHandle(ODBC32.RETCODE retcode)
 {
     return(DataProvider(Res.GetString(GetCultureInfo(), Res.Odbc_CantAllocateEnvironmentHandle, retcode.ToString())));
 }
Beispiel #9
0
 static internal Exception CantEnableConnectionpooling(ODBC32.RETCODE retcode)
 {
     return(DataProvider(Res.GetString(GetCultureInfo(), Res.Odbc_CantEnableConnectionpooling, retcode.ToString())));
 }
Beispiel #10
0
 // runtime will call even if private...
 private OdbcException(SerializationInfo si, StreamingContext sc) : base(si, sc) {
     _retcode = (ODBC32.RETCODE) si.GetValue("odbcRetcode", typeof(ODBC32.RETCODE));
     odbcErrors = (OdbcErrorCollection) si.GetValue("odbcErrors", typeof(OdbcErrorCollection));
     HResult = HResults.OdbcException;
 }