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()); }