//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // [....] // [....] //------------------------------------------------------------------------------ namespace System.Data.OleDb { using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Text; internal static class ODB { // OleDbCommand static internal void CommandParameterStatus(StringBuilder builder, int index, DBStatus status) { switch (status) { case DBStatus.S_OK: case DBStatus.S_ISNULL: case DBStatus.S_IGNORE: break; case DBStatus.E_BADACCESSOR: builder.Append(Res.GetString(Res.OleDb_CommandParameterBadAccessor,index.ToString(CultureInfo.InvariantCulture), "")); builder.Append(Environment.NewLine); break; case DBStatus.E_CANTCONVERTVALUE: builder.Append(Res.GetString(Res.OleDb_CommandParameterCantConvertValue,index.ToString(CultureInfo.InvariantCulture), "")); builder.Append(Environment.NewLine); break; case DBStatus.E_SIGNMISMATCH: builder.Append(Res.GetString(Res.OleDb_CommandParameterSignMismatch,index.ToString(CultureInfo.InvariantCulture), "")); builder.Append(Environment.NewLine); break; case DBStatus.E_DATAOVERFLOW: builder.Append(Res.GetString(Res.OleDb_CommandParameterDataOverflow,index.ToString(CultureInfo.InvariantCulture), "")); builder.Append(Environment.NewLine); break; case DBStatus.E_CANTCREATE: Debug.Assert(false, "CommandParameterStatus: unexpected E_CANTCREATE"); goto default; case DBStatus.E_UNAVAILABLE: builder.Append(Res.GetString(Res.OleDb_CommandParameterUnavailable,index.ToString(CultureInfo.InvariantCulture), "")); builder.Append(Environment.NewLine); break; case DBStatus.E_PERMISSIONDENIED: Debug.Assert(false, "CommandParameterStatus: unexpected E_PERMISSIONDENIED"); goto default; case DBStatus.E_INTEGRITYVIOLATION: Debug.Assert(false, "CommandParameterStatus: unexpected E_INTEGRITYVIOLATION"); goto default; case DBStatus.E_SCHEMAVIOLATION: Debug.Assert(false, "CommandParameterStatus: unexpected E_SCHEMAVIOLATION"); goto default; case DBStatus.E_BADSTATUS: Debug.Assert(false, "CommandParameterStatus: unexpected E_BADSTATUS"); goto default; case DBStatus.S_DEFAULT: // MDAC 66626 builder.Append(Res.GetString(Res.OleDb_CommandParameterDefault,index.ToString(CultureInfo.InvariantCulture), "")); builder.Append(Environment.NewLine); break; default: builder.Append(Res.GetString(Res.OleDb_CommandParameterError, index.ToString(CultureInfo.InvariantCulture), status.ToString())); builder.Append(Environment.NewLine); break; } } static internal Exception CommandParameterStatus(string value, Exception inner) { if (ADP.IsEmpty(value)) { return inner; } return ADP.InvalidOperation(value, inner); } static internal Exception UninitializedParameters(int index, OleDbType dbtype) { return ADP.InvalidOperation(Res.GetString(Res.OleDb_UninitializedParameters, index.ToString(CultureInfo.InvariantCulture), dbtype.ToString())); } static internal Exception BadStatus_ParamAcc(int index, DBBindStatus status) { return ADP.DataAdapter(Res.GetString(Res.OleDb_BadStatus_ParamAcc, index.ToString(CultureInfo.InvariantCulture), status.ToString())); } static internal Exception NoProviderSupportForParameters(string provider, Exception inner) { return ADP.DataAdapter(Res.GetString(Res.OleDb_NoProviderSupportForParameters, provider), inner); } static internal Exception NoProviderSupportForSProcResetParameters(string provider) { return ADP.DataAdapter(Res.GetString(Res.OleDb_NoProviderSupportForSProcResetParameters, provider)); } // OleDbProperties static internal void PropsetSetFailure(StringBuilder builder, string description, OleDbPropertyStatus status) { if (OleDbPropertyStatus.Ok == status) { return; } switch (status) { case OleDbPropertyStatus.NotSupported: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyNotSupported, description)); break; case OleDbPropertyStatus.BadValue: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyBadValue, description)); break; case OleDbPropertyStatus.BadOption: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyBadOption, description)); break; case OleDbPropertyStatus.BadColumn: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyBadColumn, description)); break; case OleDbPropertyStatus.NotAllSettable: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyNotAllSettable, description)); break; case OleDbPropertyStatus.NotSettable: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyNotSettable, description)); break; case OleDbPropertyStatus.NotSet: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyNotSet, description)); break; case OleDbPropertyStatus.Conflicting: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyConflicting, description)); break; case OleDbPropertyStatus.NotAvailable: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyNotAvailable, description)); break; default: if (0 < builder.Length) { builder.Append(Environment.NewLine); } builder.Append(Res.GetString(Res.OleDb_PropertyStatusUnknown, ((int) status).ToString(CultureInfo.InvariantCulture))); break; } } static internal Exception PropsetSetFailure(string value, Exception inner) { if (ADP.IsEmpty(value)) { return inner; } return ADP.InvalidOperation(value, inner); } // OleDbConnection static internal ArgumentException SchemaRowsetsNotSupported(string provider) { return ADP.Argument(Res.GetString(Res.OleDb_SchemaRowsetsNotSupported, "IDBSchemaRowset", provider)); } static internal OleDbException NoErrorInformation(string provider, OleDbHResult hr, Exception inner) { OleDbException e; if (!ADP.IsEmpty(provider)) { e = new OleDbException(Res.GetString(Res.OleDb_NoErrorInformation2, provider, ODB.ELookup(hr)), hr, inner); } else { e = new OleDbException(Res.GetString(Res.OleDb_NoErrorInformation, ODB.ELookup(hr)), hr, inner); } ADP.TraceExceptionAsReturnValue(e); return e; } static internal InvalidOperationException MDACNotAvailable(Exception inner) { return ADP.DataAdapter(Res.GetString(Res.OleDb_MDACNotAvailable), inner); } static internal ArgumentException MSDASQLNotSupported() { return ADP.Argument(Res.GetString(Res.OleDb_MSDASQLNotSupported)); // MDAC 69975 } static internal InvalidOperationException CommandTextNotSupported(string provider, Exception inner) { return ADP.DataAdapter(Res.GetString(Res.OleDb_CommandTextNotSupported, provider), inner); // 72632 } static internal InvalidOperationException PossiblePromptNotUserInteractive() { return ADP.DataAdapter(Res.GetString(Res.OleDb_PossiblePromptNotUserInteractive)); } static internal InvalidOperationException ProviderUnavailable(string provider, Exception inner) { //return new OleDbException(Res.GetString(Res.OleDb_ProviderUnavailable, provider), (int)OleDbHResult.CO_E_CLASSSTRING, inner); return ADP.DataAdapter(Res.GetString(Res.OleDb_ProviderUnavailable, provider), inner); } static internal InvalidOperationException TransactionsNotSupported(string provider, Exception inner) { return ADP.DataAdapter(Res.GetString(Res.OleDb_TransactionsNotSupported, provider), inner); // 72632 } static internal ArgumentException AsynchronousNotSupported() { return ADP.Argument(Res.GetString(Res.OleDb_AsynchronousNotSupported)); } static internal ArgumentException NoProviderSpecified() { return ADP.Argument(Res.GetString(Res.OleDb_NoProviderSpecified)); } static internal ArgumentException InvalidProviderSpecified() { return ADP.Argument(Res.GetString(Res.OleDb_InvalidProviderSpecified)); } static internal ArgumentException InvalidRestrictionsDbInfoKeywords(string parameter) { return ADP.Argument(Res.GetString(Res.OleDb_InvalidRestrictionsDbInfoKeywords), parameter); } static internal ArgumentException InvalidRestrictionsDbInfoLiteral(string parameter) { return ADP.Argument(Res.GetString(Res.OleDb_InvalidRestrictionsDbInfoLiteral), parameter); } static internal ArgumentException InvalidRestrictionsSchemaGuids(string parameter) { return ADP.Argument(Res.GetString(Res.OleDb_InvalidRestrictionsSchemaGuids), parameter); } static internal ArgumentException NotSupportedSchemaTable(Guid schema, OleDbConnection connection) { return ADP.Argument(Res.GetString(Res.OleDb_NotSupportedSchemaTable, OleDbSchemaGuid.GetTextFromValue(schema), connection.Provider)); } // OleDbParameter static internal Exception InvalidOleDbType(OleDbType value) { return ADP.InvalidEnumerationValue(typeof(OleDbType), (int)value); } // Getting Data static internal InvalidOperationException BadAccessor() { return ADP.DataAdapter(Res.GetString(Res.OleDb_BadAccessor)); } static internal InvalidCastException ConversionRequired() { return ADP.InvalidCast(); } static internal InvalidCastException CantConvertValue() { return ADP.InvalidCast(Res.GetString(Res.OleDb_CantConvertValue)); } static internal InvalidOperationException SignMismatch(Type type) { return ADP.DataAdapter(Res.GetString(Res.OleDb_SignMismatch, type.Name)); } static internal InvalidOperationException DataOverflow(Type type) { return ADP.DataAdapter(Res.GetString(Res.OleDb_DataOverflow, type.Name)); } static internal InvalidOperationException CantCreate(Type type) { return ADP.DataAdapter(Res.GetString(Res.OleDb_CantCreate, type.Name)); } static internal InvalidOperationException Unavailable(Type type) { return ADP.DataAdapter(Res.GetString(Res.OleDb_Unavailable, type.Name)); } static internal InvalidOperationException UnexpectedStatusValue(DBStatus status) { return ADP.DataAdapter(Res.GetString(Res.OleDb_UnexpectedStatusValue, status.ToString())); } static internal InvalidOperationException GVtUnknown(int wType) { return ADP.DataAdapter(Res.GetString(Res.OleDb_GVtUnknown, wType.ToString("X4", CultureInfo.InvariantCulture), wType.ToString(CultureInfo.InvariantCulture))); } static internal InvalidOperationException SVtUnknown(int wType) { return ADP.DataAdapter(Res.GetString(Res.OleDb_SVtUnknown, wType.ToString("X4", CultureInfo.InvariantCulture), wType.ToString(CultureInfo.InvariantCulture))); } // OleDbDataReader static internal InvalidOperationException BadStatusRowAccessor(int i, DBBindStatus rowStatus) { return ADP.DataAdapter(Res.GetString(Res.OleDb_BadStatusRowAccessor, i.ToString(CultureInfo.InvariantCulture), rowStatus.ToString())); } static internal InvalidOperationException ThreadApartmentState(Exception innerException) { return ADP.InvalidOperation(Res.GetString(Res.OleDb_ThreadApartmentState), innerException); } // OleDbDataAdapter static internal ArgumentException Fill_NotADODB(string parameter) { return ADP.Argument(Res.GetString(Res.OleDb_Fill_NotADODB), parameter); } static internal ArgumentException Fill_EmptyRecordSet(string parameter, Exception innerException) { return ADP.Argument(Res.GetString(Res.OleDb_Fill_EmptyRecordSet, "IRowset"), parameter, innerException); } static internal ArgumentException Fill_EmptyRecord(string parameter, Exception innerException) { return ADP.Argument(Res.GetString(Res.OleDb_Fill_EmptyRecord), parameter, innerException); } static internal string NoErrorMessage(OleDbHResult errorcode) { return Res.GetString(Res.OleDb_NoErrorMessage, ODB.ELookup(errorcode)); } static internal string FailedGetDescription(OleDbHResult errorcode) { return Res.GetString(Res.OleDb_FailedGetDescription, ODB.ELookup(errorcode)); } static internal string FailedGetSource(OleDbHResult errorcode) { return Res.GetString(Res.OleDb_FailedGetSource, ODB.ELookup(errorcode)); } static internal InvalidOperationException DBBindingGetVector() { return ADP.InvalidOperation(Res.GetString(Res.OleDb_DBBindingGetVector)); } static internal OleDbHResult GetErrorDescription(UnsafeNativeMethods.IErrorInfo errorInfo, OleDbHResult hresult, out string message) { Bid.Trace("\n"); OleDbHResult hr = errorInfo.GetDescription(out message); Bid.Trace(" %08X{HRESULT}, Message='%ls'\n", hr, message); if (((int)hr < 0) && ADP.IsEmpty(message)) { message = FailedGetDescription(hr) + Environment.NewLine + ODB.ELookup(hresult); } if (ADP.IsEmpty(message)) { message = ODB.ELookup(hresult); } return hr; } // OleDbEnumerator internal static ArgumentException ISourcesRowsetNotSupported() { throw ADP.Argument(Res.OleDb_ISourcesRowsetNotSupported); } // OleDbMetaDataFactory static internal InvalidOperationException IDBInfoNotSupported() { return ADP.InvalidOperation(Res.GetString(Res.OleDb_IDBInfoNotSupported)); } // explictly used error codes internal const int ADODB_AlreadyClosedError = unchecked((int)0x800A0E78); internal const int ADODB_NextResultError = unchecked((int)0x800A0CB3); // internal command states internal const int InternalStateExecuting = (int) (ConnectionState.Open | ConnectionState.Executing); internal const int InternalStateFetching = (int) (ConnectionState.Open | ConnectionState.Fetching); internal const int InternalStateClosed = (int) (ConnectionState.Closed); internal const int ExecutedIMultipleResults = 0; internal const int ExecutedIRowset = 1; internal const int ExecutedIRow = 2; internal const int PrepareICommandText = 3; // internal connection states, a superset of the command states internal const int InternalStateExecutingNot = (int) ~(ConnectionState.Executing); internal const int InternalStateFetchingNot = (int) ~(ConnectionState.Fetching); internal const int InternalStateConnecting = (int) (ConnectionState.Connecting); internal const int InternalStateOpen = (int) (ConnectionState.Open); // constants used to trigger from binding as WSTR to BYREF|WSTR // used by OleDbCommand, OleDbDataReader internal const int LargeDataSize = (1 << 13); // 8K internal const int CacheIncrement = 10; // constants used by OleDbDataReader internal static readonly IntPtr DBRESULTFLAG_DEFAULT = IntPtr.Zero; internal const short VARIANT_TRUE = -1; internal const short VARIANT_FALSE = 0; // OleDbConnection constants internal const int CLSCTX_ALL = /*CLSCTX_INPROC_SERVER*/1 | /*CLSCTX_INPROC_HANDLER*/2 | /*CLSCTX_LOCAL_SERVER*/4 | /*CLSCTX_REMOTE_SERVER*/16; internal const int MaxProgIdLength = 255; internal const int DBLITERAL_CATALOG_SEPARATOR = 3; internal const int DBLITERAL_QUOTE_PREFIX = 15; internal const int DBLITERAL_QUOTE_SUFFIX = 28; internal const int DBLITERAL_SCHEMA_SEPARATOR = 27; internal const int DBLITERAL_TABLE_NAME = 17; internal const int DBPROP_ACCESSORDER = 0xe7; internal const int DBPROP_AUTH_CACHE_AUTHINFO = 0x5; internal const int DBPROP_AUTH_ENCRYPT_PASSWORD= 0x6; internal const int DBPROP_AUTH_INTEGRATED = 0x7; internal const int DBPROP_AUTH_MASK_PASSWORD = 0x8; internal const int DBPROP_AUTH_PASSWORD = 0x9; internal const int DBPROP_AUTH_PERSIST_ENCRYPTED = 0xa; internal const int DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO = 0xb; internal const int DBPROP_AUTH_USERID = 0xc; internal const int DBPROP_CATALOGLOCATION = 0x16; internal const int DBPROP_COMMANDTIMEOUT = 0x22; internal const int DBPROP_CONNECTIONSTATUS = 0xf4; internal const int DBPROP_CURRENTCATALOG = 0x25; internal const int DBPROP_DATASOURCENAME = 0x26; internal const int DBPROP_DBMSNAME = 0x28; internal const int DBPROP_DBMSVER = 0x29; internal const int DBPROP_GROUPBY = 0x2c; internal const int DBPROP_HIDDENCOLUMNS = 0x102; internal const int DBPROP_IColumnsRowset = 0x7b; internal const int DBPROP_IDENTIFIERCASE = 0x2e; internal const int DBPROP_INIT_ASYNCH = 0xc8; internal const int DBPROP_INIT_BINDFLAGS = 0x10e; internal const int DBPROP_INIT_CATALOG = 0xe9; internal const int DBPROP_INIT_DATASOURCE = 0x3b; internal const int DBPROP_INIT_GENERALTIMEOUT = 0x11c; internal const int DBPROP_INIT_HWND = 0x3c; internal const int DBPROP_INIT_IMPERSONATION_LEVEL = 0x3d; internal const int DBPROP_INIT_LCID = 0xba; internal const int DBPROP_INIT_LOCATION = 0x3e; internal const int DBPROP_INIT_LOCKOWNER = 0x10f; internal const int DBPROP_INIT_MODE = 0x3f; internal const int DBPROP_INIT_OLEDBSERVICES = 0xf8; internal const int DBPROP_INIT_PROMPT = 0x40; internal const int DBPROP_INIT_PROTECTION_LEVEL= 0x41; internal const int DBPROP_INIT_PROVIDERSTRING = 0xa0; internal const int DBPROP_INIT_TIMEOUT = 0x42; internal const int DBPROP_IRow = 0x107; internal const int DBPROP_MAXROWS = 0x49; internal const int DBPROP_MULTIPLERESULTS = 0xc4; internal const int DBPROP_ORDERBYCOLUNSINSELECT= 0x55; internal const int DBPROP_PROVIDERFILENAME = 0x60; internal const int DBPROP_QUOTEDIDENTIFIERCASE = 0x64; internal const int DBPROP_RESETDATASOURCE = 0xf7; internal const int DBPROP_SQLSUPPORT = 0x6d; internal const int DBPROP_UNIQUEROWS = 0xee; // property status internal const int DBPROPSTATUS_OK = 0; internal const int DBPROPSTATUS_NOTSUPPORTED = 1; internal const int DBPROPSTATUS_BADVALUE = 2; internal const int DBPROPSTATUS_BADOPTION = 3; internal const int DBPROPSTATUS_BADCOLUMN = 4; internal const int DBPROPSTATUS_NOTALLSETTABLE = 5; internal const int DBPROPSTATUS_NOTSETTABLE = 6; internal const int DBPROPSTATUS_NOTSET = 7; internal const int DBPROPSTATUS_CONFLICTING = 8; internal const int DBPROPSTATUS_NOTAVAILABLE = 9; internal const int DBPROPOPTIONS_REQUIRED = 0; internal const int DBPROPOPTIONS_OPTIONAL = 1; internal const int DBPROPFLAGS_WRITE = 0x400; internal const int DBPROPFLAGS_SESSION = 0x1000; // misc. property values internal const int DBPROPVAL_AO_RANDOM = 2; internal const int DBPROPVAL_CL_END = 2; internal const int DBPROPVAL_CL_START = 1; internal const int DBPROPVAL_CS_COMMUNICATIONFAILURE = 2; internal const int DBPROPVAL_CS_INITIALIZED = 1; internal const int DBPROPVAL_CS_UNINITIALIZED = 0; internal const int DBPROPVAL_GB_COLLATE = 16; internal const int DBPROPVAL_GB_CONTAINS_SELECT = 4; internal const int DBPROPVAL_GB_EQUALS_SELECT = 2; internal const int DBPROPVAL_GB_NO_RELATION = 8; internal const int DBPROPVAL_GB_NOT_SUPPORTED = 1; internal const int DBPROPVAL_IC_LOWER = 2; internal const int DBPROPVAL_IC_MIXED = 8; internal const int DBPROPVAL_IC_SENSITIVE = 4; internal const int DBPROPVAL_IC_UPPER = 1; internal const int DBPROPVAL_IN_ALLOWNULL = 0x00000000; /*internal const int DBPROPVAL_IN_DISALLOWNULL = 0x00000001; internal const int DBPROPVAL_IN_IGNORENULL = 0x00000002; internal const int DBPROPVAL_IN_IGNOREANYNULL = 0x00000004;*/ internal const int DBPROPVAL_MR_NOTSUPPORTED = 0; internal const int DBPROPVAL_RD_RESETALL = unchecked((int) 0xffffffff); internal const int DBPROPVAL_OS_RESOURCEPOOLING = 0x00000001; internal const int DBPROPVAL_OS_TXNENLISTMENT = 0x00000002; internal const int DBPROPVAL_OS_CLIENTCURSOR = 0x00000004; internal const int DBPROPVAL_OS_AGR_AFTERSESSION = 0x00000008; internal const int DBPROPVAL_SQL_ODBC_MINIMUM = 1; internal const int DBPROPVAL_SQL_ESCAPECLAUSES = 0x00000100; // OLE DB providers never return pGuid-style bindings. // They are provided as a convenient shortcut for consumers supplying bindings all covered by the same GUID (for example, when creating bindings to access data). internal const int DBKIND_GUID_NAME = 0; internal const int DBKIND_GUID_PROPID = 1; internal const int DBKIND_NAME = 2; internal const int DBKIND_PGUID_NAME = 3; internal const int DBKIND_PGUID_PROPID = 4; internal const int DBKIND_PROPID = 5; internal const int DBKIND_GUID = 6; internal const int DBCOLUMNFLAGS_ISBOOKMARK = 0x01; internal const int DBCOLUMNFLAGS_ISLONG = 0x80; internal const int DBCOLUMNFLAGS_ISFIXEDLENGTH = 0x10; internal const int DBCOLUMNFLAGS_ISNULLABLE = 0x20; internal const int DBCOLUMNFLAGS_ISROWSET = 0x100000; internal const int DBCOLUMNFLAGS_ISROW = 0x200000; internal const int DBCOLUMNFLAGS_ISROWSET_DBCOLUMNFLAGS_ISROW = /*DBCOLUMNFLAGS_ISROWSET*/0x100000 | /*DBCOLUMNFLAGS_ISROW*/0x200000; internal const int DBCOLUMNFLAGS_ISLONG_DBCOLUMNFLAGS_ISSTREAM = /*DBCOLUMNFLAGS_ISLONG*/0x80 | /*DBCOLUMNFLAGS_ISSTREAM*/0x80000; internal const int DBCOLUMNFLAGS_ISROWID_DBCOLUMNFLAGS_ISROWVER = /*DBCOLUMNFLAGS_ISROWID*/0x100 | /*DBCOLUMNFLAGS_ISROWVER*/0x200; internal const int DBCOLUMNFLAGS_WRITE_DBCOLUMNFLAGS_WRITEUNKNOWN = /*DBCOLUMNFLAGS_WRITE*/0x4 | /*DBCOLUMNFLAGS_WRITEUNKNOWN*/0x8; internal const int DBCOLUMNFLAGS_ISNULLABLE_DBCOLUMNFLAGS_MAYBENULL = /*DBCOLUMNFLAGS_ISNULLABLE*/0x20 | /*DBCOLUMNFLAGS_MAYBENULL*/0x40; // accessor constants internal const int DBACCESSOR_ROWDATA = 0x2; internal const int DBACCESSOR_PARAMETERDATA = 0x4; // commandbuilder constants internal const int DBPARAMTYPE_INPUT = 0x01; internal const int DBPARAMTYPE_INPUTOUTPUT = 0x02; internal const int DBPARAMTYPE_OUTPUT = 0x03; internal const int DBPARAMTYPE_RETURNVALUE = 0x04; // parameter constants /*internal const int DBPARAMIO_NOTPARAM = 0; internal const int DBPARAMIO_INPUT = 0x1; internal const int DBPARAMIO_OUTPUT = 0x2;*/ /*internal const int DBPARAMFLAGS_ISINPUT = 0x1; internal const int DBPARAMFLAGS_ISOUTPUT = 0x2; internal const int DBPARAMFLAGS_ISSIGNED = 0x10; internal const int DBPARAMFLAGS_ISNULLABLE = 0x40; internal const int DBPARAMFLAGS_ISLONG = 0x80;*/ internal const int ParameterDirectionFlag = 3; // values of the searchable column in the provider types schema rowset internal const uint DB_UNSEARCHABLE = 1; internal const uint DB_LIKE_ONLY = 2; internal const uint DB_ALL_EXCEPT_LIKE = 3; internal const uint DB_SEARCHABLE = 4; static internal readonly IntPtr DB_INVALID_HACCESSOR = ADP.PtrZero; static internal readonly IntPtr DB_NULL_HCHAPTER = ADP.PtrZero; static internal readonly IntPtr DB_NULL_HROW = ADP.PtrZero; /*static internal readonly int SizeOf_tagDBPARAMINFO = Marshal.SizeOf(typeof(tagDBPARAMINFO));*/ static internal readonly int SizeOf_tagDBBINDING = Marshal.SizeOf(typeof(tagDBBINDING)); static internal readonly int SizeOf_tagDBCOLUMNINFO = Marshal.SizeOf(typeof(tagDBCOLUMNINFO)); static internal readonly int SizeOf_tagDBLITERALINFO = Marshal.SizeOf(typeof(tagDBLITERALINFO)); static internal readonly int SizeOf_tagDBPROPSET = Marshal.SizeOf(typeof(tagDBPROPSET)); static internal readonly int SizeOf_tagDBPROP = Marshal.SizeOf(typeof(tagDBPROP)); static internal readonly int SizeOf_tagDBPROPINFOSET = Marshal.SizeOf(typeof(tagDBPROPINFOSET)); static internal readonly int SizeOf_tagDBPROPINFO = Marshal.SizeOf(typeof(tagDBPROPINFO)); static internal readonly int SizeOf_tagDBPROPIDSET = Marshal.SizeOf(typeof(tagDBPROPIDSET)); static internal readonly int SizeOf_Guid = Marshal.SizeOf(typeof(Guid)); static internal readonly int SizeOf_Variant = 8 + (2 * ADP.PtrSize); // 16 on 32bit, 24 on 64bit static internal readonly int OffsetOf_tagDBPROP_Status = Marshal.OffsetOf(typeof(tagDBPROP), "dwStatus").ToInt32(); static internal readonly int OffsetOf_tagDBPROP_Value = Marshal.OffsetOf(typeof(tagDBPROP), "vValue").ToInt32(); static internal readonly int OffsetOf_tagDBPROPSET_Properties = Marshal.OffsetOf(typeof(tagDBPROPSET), "rgProperties").ToInt32(); static internal readonly int OffsetOf_tagDBPROPINFO_Value = Marshal.OffsetOf(typeof(tagDBPROPINFO), "vValue").ToInt32(); static internal readonly int OffsetOf_tagDBPROPIDSET_PropertySet = Marshal.OffsetOf(typeof(tagDBPROPIDSET), "guidPropertySet").ToInt32(); static internal readonly int OffsetOf_tagDBLITERALINFO_it = Marshal.OffsetOf(typeof(tagDBLITERALINFO), "it").ToInt32(); static internal readonly int OffsetOf_tagDBBINDING_obValue = Marshal.OffsetOf(typeof(tagDBBINDING), "obValue").ToInt32(); static internal readonly int OffsetOf_tagDBBINDING_wType = Marshal.OffsetOf(typeof(tagDBBINDING), "wType").ToInt32(); static internal Guid IID_NULL = Guid.Empty; static internal Guid IID_IUnknown = new Guid(0x00000000,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46); static internal Guid IID_IDBInitialize = new Guid(0x0C733A8B,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_IDBCreateSession = new Guid(0x0C733A5D,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_IDBCreateCommand = new Guid(0x0C733A1D,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_ICommandText = new Guid(0x0C733A27,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_IMultipleResults = new Guid(0x0C733A90,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_IRow = new Guid(0x0C733AB4,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_IRowset = new Guid(0x0C733A7C,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid IID_ISQLErrorInfo = new Guid(0x0C733A74,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal Guid CLSID_DataLinks = new Guid(0x2206CDB2,0x19C1,0x11D1,0x89,0xE0,0x00,0xC0,0x4F,0xD7,0xA8,0x29); static internal Guid DBGUID_DEFAULT = new Guid(0xc8b521fb,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); static internal Guid DBGUID_ROWSET = new Guid(0xc8b522f6,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); static internal Guid DBGUID_ROW = new Guid(0xc8b522f7,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); static internal Guid DBGUID_ROWDEFAULTSTREAM = new Guid(0x0C733AB7,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); static internal readonly Guid CLSID_MSDASQL = new Guid(0xc8b522cb,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); static internal readonly object DBCOL_SPECIALCOL = new Guid(0xc8b52232,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); static internal readonly char[] ErrorTrimCharacters = new char[] { '\r', '\n', '\0' }; // MDAC 73707 // used by ConnectionString hashtable, must be all lowercase internal const string Asynchronous_Processing = "asynchronous processing"; internal const string AttachDBFileName = "attachdbfilename"; internal const string Connect_Timeout = "connect timeout"; internal const string Data_Source = "data source"; internal const string File_Name = "file name"; internal const string Initial_Catalog = "initial catalog"; internal const string Password = "password"; internal const string Persist_Security_Info = "persist security info"; internal const string Provider = "provider"; internal const string Pwd = "pwd"; internal const string User_ID = "user id"; // used by OleDbConnection as property names internal const string Current_Catalog = "current catalog"; internal const string DBMS_Version = "dbms version"; internal const string Properties = "Properties"; // used by OleDbConnection to create and verify OLE DB Services internal const string DataLinks_CLSID = "CLSID\\{2206CDB2-19C1-11D1-89E0-00C04FD7A829}\\InprocServer32"; internal const string OLEDB_SERVICES = "OLEDB_SERVICES"; // used by OleDbConnection to eliminate post-open detection of 'Microsoft OLE DB Provider for ODBC Drivers' internal const string DefaultDescription_MSDASQL = "microsoft ole db provider for odbc drivers"; internal const string MSDASQL = "msdasql"; internal const string MSDASQLdot = "msdasql."; // used by OleDbPermission internal const string _Add = "add"; internal const string _Keyword = "keyword"; internal const string _Name = "name"; internal const string _Value = "value"; // IColumnsRowset column names internal const string DBCOLUMN_BASECATALOGNAME = "DBCOLUMN_BASECATALOGNAME"; internal const string DBCOLUMN_BASECOLUMNNAME = "DBCOLUMN_BASECOLUMNNAME"; internal const string DBCOLUMN_BASESCHEMANAME = "DBCOLUMN_BASESCHEMANAME"; internal const string DBCOLUMN_BASETABLENAME = "DBCOLUMN_BASETABLENAME"; internal const string DBCOLUMN_COLUMNSIZE = "DBCOLUMN_COLUMNSIZE"; internal const string DBCOLUMN_FLAGS = "DBCOLUMN_FLAGS"; internal const string DBCOLUMN_GUID = "DBCOLUMN_GUID"; internal const string DBCOLUMN_IDNAME = "DBCOLUMN_IDNAME"; internal const string DBCOLUMN_ISAUTOINCREMENT = "DBCOLUMN_ISAUTOINCREMENT"; internal const string DBCOLUMN_ISUNIQUE = "DBCOLUMN_ISUNIQUE"; internal const string DBCOLUMN_KEYCOLUMN = "DBCOLUMN_KEYCOLUMN"; internal const string DBCOLUMN_NAME = "DBCOLUMN_NAME"; internal const string DBCOLUMN_NUMBER = "DBCOLUMN_NUMBER"; internal const string DBCOLUMN_PRECISION = "DBCOLUMN_PRECISION"; internal const string DBCOLUMN_PROPID = "DBCOLUMN_PROPID"; internal const string DBCOLUMN_SCALE = "DBCOLUMN_SCALE"; internal const string DBCOLUMN_TYPE = "DBCOLUMN_TYPE"; internal const string DBCOLUMN_TYPEINFO = "DBCOLUMN_TYPEINFO"; // ISchemaRowset.GetRowset(OleDbSchemaGuid.Indexes) column names internal const string PRIMARY_KEY = "PRIMARY_KEY"; internal const string UNIQUE = "UNIQUE"; internal const string COLUMN_NAME = "COLUMN_NAME"; internal const string NULLS = "NULLS"; internal const string INDEX_NAME = "INDEX_NAME"; // ISchemaRowset.GetSchemaRowset(OleDbSchemaGuid.Procedure_Parameters) column names internal const string PARAMETER_NAME = "PARAMETER_NAME"; internal const string ORDINAL_POSITION = "ORDINAL_POSITION"; internal const string PARAMETER_TYPE = "PARAMETER_TYPE"; internal const string IS_NULLABLE = "IS_NULLABLE"; internal const string DATA_TYPE = "DATA_TYPE"; internal const string CHARACTER_MAXIMUM_LENGTH = "CHARACTER_MAXIMUM_LENGTH"; internal const string NUMERIC_PRECISION = "NUMERIC_PRECISION"; internal const string NUMERIC_SCALE = "NUMERIC_SCALE"; internal const string TYPE_NAME = "TYPE_NAME"; // DataTable.Select to sort on ordinal position for OleDbSchemaGuid.Procedure_Parameters internal const string ORDINAL_POSITION_ASC = "ORDINAL_POSITION ASC"; // OleDbConnection.GetOleDbSchemmaTable(OleDbSchemaGuid.SchemaGuids) table and column names internal const string SchemaGuids = "SchemaGuids"; internal const string Schema = "Schema"; internal const string RestrictionSupport = "RestrictionSupport"; // OleDbConnection.GetOleDbSchemmaTable(OleDbSchemaGuid.DbInfoKeywords) table and column names internal const string DbInfoKeywords = "DbInfoKeywords"; internal const string Keyword = "Keyword"; // Debug error string writeline static internal string ELookup(OleDbHResult hr) { StringBuilder builder = new StringBuilder(); builder.Append(hr.ToString()); if ((0 < builder.Length) && Char.IsDigit(builder[0])) { builder.Length = 0; } builder.Append("(0x"); builder.Append(((int)hr).ToString("X8", CultureInfo.InvariantCulture)); builder.Append(")"); return builder.ToString(); } #if DEBUG static readonly private Hashtable g_wlookpup = new Hashtable(); static internal string WLookup(short id) { string value = (string)g_wlookpup[id]; if (null == value) { value = "0x" + ((short) id).ToString("X2", CultureInfo.InvariantCulture) + " " + ((short) id); value += " " + ((DBTypeEnum) id).ToString(); g_wlookpup[id] = value; } return value; } private enum DBTypeEnum { EMPTY = 0, // NULL = 1, // I2 = 2, // I4 = 3, // R4 = 4, // R8 = 5, // CY = 6, // DATE = 7, // BSTR = 8, // IDISPATCH = 9, // ERROR = 10, // BOOL = 11, // VARIANT = 12, // IUNKNOWN = 13, // DECIMAL = 14, // I1 = 16, // UI1 = 17, // UI2 = 18, // UI4 = 19, // I8 = 20, // UI8 = 21, // FILETIME = 64, // 2.0 GUID = 72, // BYTES = 128, // STR = 129, // WSTR = 130, // NUMERIC = 131, // with potential overflow UDT = 132, // should never be encountered DBDATE = 133, // DBTIME = 134, // DBTIMESTAMP = 135, // granularity reduced from 1ns to 100ns (sql is 3.33 milli seconds) HCHAPTER = 136, // 1.5 PROPVARIANT = 138, // 2.0 - as variant VARNUMERIC = 139, // 2.0 - as string else ConversionException BYREF_I2 = 0x4002, BYREF_I4 = 0x4003, BYREF_R4 = 0x4004, BYREF_R8 = 0x4005, BYREF_CY = 0x4006, BYREF_DATE = 0x4007, BYREF_BSTR = 0x4008, BYREF_IDISPATCH = 0x4009, BYREF_ERROR = 0x400a, BYREF_BOOL = 0x400b, BYREF_VARIANT = 0x400c, BYREF_IUNKNOWN = 0x400d, BYREF_DECIMAL = 0x400e, BYREF_I1 = 0x4010, BYREF_UI1 = 0x4011, BYREF_UI2 = 0x4012, BYREF_UI4 = 0x4013, BYREF_I8 = 0x4014, BYREF_UI8 = 0x4015, BYREF_FILETIME = 0x4040, BYREF_GUID = 0x4048, BYREF_BYTES = 0x4080, BYREF_STR = 0x4081, BYREF_WSTR = 0x4082, BYREF_NUMERIC = 0x4083, BYREF_UDT = 0x4084, BYREF_DBDATE = 0x4085, BYREF_DBTIME = 0x4086, BYREF_DBTIMESTAMP = 0x4087, BYREF_HCHAPTER = 0x4088, BYREF_PROPVARIANT = 0x408a, BYREF_VARNUMERIC = 0x408b, VECTOR = 0x1000, ARRAY = 0x2000, BYREF = 0x4000, // RESERVED = 0x8000, // SystemException } #endif } }