예제 #1
0
        internal OleDbHResult CreateAccessor(UnsafeNativeMethods.IAccessor iaccessor, int flags, ColumnBinding[] bindings)
        {
            int[] rowBindStatus = new int[BindingCount()];

            _iaccessor = iaccessor;
            OleDbHResult hr = iaccessor.CreateAccessor(flags, (IntPtr)rowBindStatus.Length, this, (IntPtr)_dataLength, out _accessorHandle, rowBindStatus);

            for (int k = 0; k < rowBindStatus.Length; ++k)
            {
                if (DBBindStatus.OK != (DBBindStatus)rowBindStatus[k])
                {
                    if (ODB.DBACCESSOR_PARAMETERDATA == flags)
                    {
                        throw ODB.BadStatus_ParamAcc(bindings[k].ColumnBindingOrdinal, (DBBindStatus)rowBindStatus[k]);
                    }
                    else if (ODB.DBACCESSOR_ROWDATA == flags)
                    {
                        throw ODB.BadStatusRowAccessor(bindings[k].ColumnBindingOrdinal, (DBBindStatus)rowBindStatus[k]);
                    }
                    else
                    {
                        Debug.Assert(false, "unknown accessor buffer");
                    }
                }
            }
            return(hr);
        }
        internal OleDbHResult CreateAccessor(UnsafeNativeMethods.IAccessor iaccessor, int flags, ColumnBinding[] bindings)
        {
            OleDbHResult result = OleDbHResult.S_OK;

            int[] rgStatus = new int[this.BindingCount()];
            this._iaccessor = iaccessor;
            Bid.Trace("<oledb.IAccessor.CreateAccessor|API|OLEDB>\n");
            result = iaccessor.CreateAccessor(flags, (IntPtr)rgStatus.Length, this, (IntPtr)this._dataLength, out this._accessorHandle, rgStatus);
            Bid.Trace("<oledb.IAccessor.CreateAccessor|API|OLEDB|RET> %08X{HRESULT}\n", result);
            for (int i = 0; i < rgStatus.Length; i++)
            {
                if (rgStatus[i] != 0)
                {
                    if (4 == flags)
                    {
                        throw ODB.BadStatus_ParamAcc(bindings[i].ColumnBindingOrdinal, (DBBindStatus)rgStatus[i]);
                    }
                    if (2 == flags)
                    {
                        throw ODB.BadStatusRowAccessor(bindings[i].ColumnBindingOrdinal, (DBBindStatus)rgStatus[i]);
                    }
                }
            }
            return(result);
        }
예제 #3
0
        private void CreateAccessor()
        {
            Debug.Assert(System.Data.CommandType.Text == CommandType || System.Data.CommandType.StoredProcedure == CommandType, "CreateAccessor: incorrect CommandType");
            Debug.Assert(null == _dbBindings, "CreateAccessor: already has dbBindings");
            Debug.Assert(HasParameters(), "CreateAccessor: unexpected, no parameter collection");

            // do this first in-case the command doesn't support parameters
            UnsafeNativeMethods.ICommandWithParameters commandWithParameters = ICommandWithParameters();

            OleDbParameterCollection collection = _parameters !;

            OleDbParameter[] parameters = new OleDbParameter[collection.Count];
            collection.CopyTo(parameters, 0);

            // _dbBindings is used as a switch during ExecuteCommand, so don't set it until everything okay
            Bindings bindings = new Bindings(parameters, collection.ChangeID);

            for (int i = 0; i < parameters.Length; ++i)
            {
                bindings.ForceRebind |= parameters[i].BindParameter(i, bindings);
            }

            bindings.AllocateForAccessor(null, 0, 0);

            ApplyParameterBindings(commandWithParameters, bindings.BindInfo !);

            UnsafeNativeMethods.IAccessor iaccessor = IAccessor();
            OleDbHResult hr = bindings.CreateAccessor(iaccessor, ODB.DBACCESSOR_PARAMETERDATA);

            if (hr < 0)
            {
                ProcessResults(hr);
            }
            _dbBindings = bindings;
        }
 protected override bool ReleaseHandle()
 {
     this._iaccessor = null;
     if (this._needToReset && this._haveData)
     {
         IntPtr handle = base.handle;
         if (IntPtr.Zero != handle)
         {
             this.ResetValues(handle, null);
         }
     }
     return(base.ReleaseHandle());
 }
예제 #5
0
 protected override bool ReleaseHandle()
 {
     // NOTE: The SafeHandle class guarantees this will be called exactly once.
     _iaccessor = null;
     if (_needToReset && _haveData)
     {
         IntPtr buffer = base.handle;
         if (IntPtr.Zero != buffer)
         {
             ResetValues(buffer, null);
         }
     }
     return(base.ReleaseHandle());
 }
        internal void Dispose()
        {
            int num;

            this.ResetValues();
            UnsafeNativeMethods.IAccessor accessor = this._iaccessor;
            IntPtr hAccessor = this._accessorHandle;

            this._iaccessor      = null;
            this._accessorHandle = ODB.DB_INVALID_HACCESSOR;
            if (((ODB.DB_INVALID_HACCESSOR != hAccessor) && (accessor != null)) && (accessor.ReleaseAccessor(hAccessor, out num) < OleDbHResult.S_OK))
            {
                SafeNativeMethods.Wrapper.ClearErrorInfo();
            }
            base.Dispose();
        }
예제 #7
0
        internal new void Dispose()
        {
            ResetValues();

            UnsafeNativeMethods.IAccessor iaccessor = _iaccessor;
            IntPtr accessorHandle = _accessorHandle;

            _iaccessor      = null;
            _accessorHandle = ODB.DB_INVALID_HACCESSOR;

            if ((ODB.DB_INVALID_HACCESSOR != accessorHandle) && (null != iaccessor))
            {
                OleDbHResult hr;
                int          refcount;
                hr = iaccessor.ReleaseAccessor(accessorHandle, out refcount);
                if (hr < 0)
                { // ignore any error msgs
                    SafeNativeMethods.Wrapper.ClearErrorInfo();
                }
            }

            base.Dispose();
        }
 internal OleDbHResult CreateAccessor(UnsafeNativeMethods.IAccessor iaccessor, int flags, ColumnBinding[] bindings)
 {
     OleDbHResult result = OleDbHResult.S_OK;
     int[] rgStatus = new int[this.BindingCount()];
     this._iaccessor = iaccessor;
     Bid.Trace("<oledb.IAccessor.CreateAccessor|API|OLEDB>\n");
     result = iaccessor.CreateAccessor(flags, (IntPtr) rgStatus.Length, this, (IntPtr) this._dataLength, out this._accessorHandle, rgStatus);
     Bid.Trace("<oledb.IAccessor.CreateAccessor|API|OLEDB|RET> %08X{HRESULT}\n", result);
     for (int i = 0; i < rgStatus.Length; i++)
     {
         if (rgStatus[i] != 0)
         {
             if (4 == flags)
             {
                 throw ODB.BadStatus_ParamAcc(bindings[i].ColumnBindingOrdinal, (DBBindStatus) rgStatus[i]);
             }
             if (2 == flags)
             {
                 throw ODB.BadStatusRowAccessor(bindings[i].ColumnBindingOrdinal, (DBBindStatus) rgStatus[i]);
             }
         }
     }
     return result;
 }
예제 #9
0
        internal OleDbHResult CreateAccessor(UnsafeNativeMethods.IAccessor iaccessor, int flags, ColumnBinding[] bindings) {
            OleDbHResult hr = 0;
            int[] rowBindStatus = new int[BindingCount()];

            _iaccessor = iaccessor;

            Bid.Trace("<oledb.IAccessor.CreateAccessor|API|OLEDB>\n");
            hr = iaccessor.CreateAccessor(flags, (IntPtr)rowBindStatus.Length, this, (IntPtr)_dataLength, out _accessorHandle, rowBindStatus); // MDAC 69530
            Bid.Trace("<oledb.IAccessor.CreateAccessor|API|OLEDB|RET> %08X{HRESULT}\n", hr);

            for (int k = 0; k < rowBindStatus.Length; ++k) {
                if (DBBindStatus.OK != (DBBindStatus)rowBindStatus[k]) {
                    if (ODB.DBACCESSOR_PARAMETERDATA == flags) {
                        throw ODB.BadStatus_ParamAcc(bindings[k].ColumnBindingOrdinal, (DBBindStatus)rowBindStatus[k]);
                    }
                    else if (ODB.DBACCESSOR_ROWDATA == flags) {
                        throw ODB.BadStatusRowAccessor(bindings[k].ColumnBindingOrdinal, (DBBindStatus)rowBindStatus[k]);
                    }
                    else Debug.Assert(false, "unknown accessor buffer");
                }
            }
            return hr;
        }
예제 #10
0
 override protected bool ReleaseHandle() {
     // NOTE: The SafeHandle class guarantees this will be called exactly once.
     _iaccessor = null;
     if (_needToReset && _haveData) {
         IntPtr buffer = base.handle;
         if (IntPtr.Zero != buffer) {
             ResetValues(buffer, null);
         }
     }
     return base.ReleaseHandle();
 }
예제 #11
0
        internal new void Dispose() {
            ResetValues();

            UnsafeNativeMethods.IAccessor iaccessor = _iaccessor;
            IntPtr accessorHandle = _accessorHandle;

            _iaccessor = null;
            _accessorHandle = ODB.DB_INVALID_HACCESSOR;

            if ((ODB.DB_INVALID_HACCESSOR != accessorHandle) && (null != iaccessor)) {
                OleDbHResult hr;
                int refcount;
                hr = iaccessor.ReleaseAccessor(accessorHandle, out refcount);
                if (hr < 0) { // ignore any error msgs
                    SafeNativeMethods.Wrapper.ClearErrorInfo();
                }
            }

            base.Dispose();
        }
예제 #12
0
 internal void CloseFromConnection() {
     _iaccessor = null;
     _accessorHandle = ODB.DB_INVALID_HACCESSOR;
 }
 protected override bool ReleaseHandle()
 {
     this._iaccessor = null;
     if (this._needToReset && this._haveData)
     {
         IntPtr handle = base.handle;
         if (IntPtr.Zero != handle)
         {
             this.ResetValues(handle, null);
         }
     }
     return base.ReleaseHandle();
 }
 internal void CloseFromConnection()
 {
     this._iaccessor      = null;
     this._accessorHandle = ODB.DB_INVALID_HACCESSOR;
 }
 internal OleDbHResult CreateAccessor(UnsafeNativeMethods.IAccessor iaccessor, int flags)
 {
     return(this._rowBinding.CreateAccessor(iaccessor, flags, this._columnBindings));
 }
예제 #16
0
 internal OleDbHResult CreateAccessor(UnsafeNativeMethods.IAccessor iaccessor, int flags)
 {
     Debug.Assert(null != _rowBinding, "no row binding");
     Debug.Assert(null != _columnBindings, "no column bindings");
     return(_rowBinding.CreateAccessor(iaccessor, flags, _columnBindings));
 }
 internal void Dispose()
 {
     int num;
     this.ResetValues();
     UnsafeNativeMethods.IAccessor accessor = this._iaccessor;
     IntPtr hAccessor = this._accessorHandle;
     this._iaccessor = null;
     this._accessorHandle = ODB.DB_INVALID_HACCESSOR;
     if (((ODB.DB_INVALID_HACCESSOR != hAccessor) && (accessor != null)) && (accessor.ReleaseAccessor(hAccessor, out num) < OleDbHResult.S_OK))
     {
         SafeNativeMethods.Wrapper.ClearErrorInfo();
     }
     base.Dispose();
 }