Пример #1
0
        internal bool BindParameter(int i, DBBindings bindings, UnsafeNativeMethods.tagDBPARAMBINDINFO[] bindInfo)
        {
            ValidateParameter();

            int wtype = NativeDBType.wType;

            int maxLen = GetParameterByteCount();

            NativeDBType dbType = NativeDBType;

            if (dbType.islong || (IsParameterVarLength() && (ODB.LargeDataSize < maxLen)))
            {
                maxLen = IntPtr.Size;
                wtype |= NativeDBType.BYREF;
            }
            byte precision = GetParameterPrecision();
            byte scale     = GetParameterScale();

            bindInfo[i].pwszDataSourceType = NativeDBType.dbString;
            bindInfo[i].pwszName           = IntPtr.Zero;
            bindInfo[i].ulParamSize        = new IntPtr(GetParameterSize());
            bindInfo[i].dwFlags            = GetParameterFlags();
            bindInfo[i].bPrecision         = precision;
            bindInfo[i].bScale             = scale;

            // tagDBBINDING info for CreateAccessor
            bindings.CurrentIndex = i;
            bindings.Ordinal      = i + 1;
            //bindings.ValueOffset  = bindings.DataBufferSize; // set via MaxLen
            //bindings.LengthOffset = i * sizeof_int64;
            //bindings.StatusOffset = i * sizeof_int64 + sizeof_int32;
            //bindings.TypeInfoPtr  = 0;
            //bindings.ObjectPtr    = 0;
            //bindings.BindExtPtr   = 0;
            bindings.Part = NativeDBType.dbPart;
            //bindings.MemOwner     = /*DBMEMOWNER_CLIENTOWNED*/0;
            bindings.ParamIO = GetParameterDirection();
            bindings.MaxLen  = maxLen;      // also increments databuffer size
            //bindings.Flags        = 0;
            bindings.DbType    = wtype;
            bindings.Precision = precision;
            bindings.Scale     = scale;

#if DEBUG
            if (AdapterSwitches.OleDbTrace.TraceVerbose)
            {
                ODB.Trace_Binding(i, bindings, ParameterName);
            }
#endif
            return(IsParameterComputed());
        }