1 //------------------------------------------------------------------------------ 2 // <copyright file="OLEDB_Util.cs" company="Microsoft"> 3 // Copyright (c) Microsoft Corporation. All rights reserved. 4 // </copyright> 5 // <owner current="true" primary="true">Microsoft</owner> 6 // <owner current="true" primary="false">Microsoft</owner> 7 //------------------------------------------------------------------------------ 8 9 namespace System.Data.OleDb { 10 11 using System; 12 using System.Collections; 13 using System.ComponentModel; 14 using System.Data; 15 using System.Data.Common; 16 using System.Diagnostics; 17 using System.Globalization; 18 using System.Runtime.InteropServices; 19 using System.Text; 20 21 internal static class ODB { 22 23 // OleDbCommand CommandParameterStatus(StringBuilder builder, int index, DBStatus status)24 static internal void CommandParameterStatus(StringBuilder builder, int index, DBStatus status) { 25 switch (status) { 26 case DBStatus.S_OK: 27 case DBStatus.S_ISNULL: 28 case DBStatus.S_IGNORE: 29 break; 30 31 case DBStatus.E_BADACCESSOR: 32 builder.Append(Res.GetString(Res.OleDb_CommandParameterBadAccessor,index.ToString(CultureInfo.InvariantCulture), "")); 33 builder.Append(Environment.NewLine); 34 break; 35 36 case DBStatus.E_CANTCONVERTVALUE: 37 builder.Append(Res.GetString(Res.OleDb_CommandParameterCantConvertValue,index.ToString(CultureInfo.InvariantCulture), "")); 38 builder.Append(Environment.NewLine); 39 break; 40 41 case DBStatus.E_SIGNMISMATCH: 42 builder.Append(Res.GetString(Res.OleDb_CommandParameterSignMismatch,index.ToString(CultureInfo.InvariantCulture), "")); 43 builder.Append(Environment.NewLine); 44 break; 45 46 case DBStatus.E_DATAOVERFLOW: 47 builder.Append(Res.GetString(Res.OleDb_CommandParameterDataOverflow,index.ToString(CultureInfo.InvariantCulture), "")); 48 builder.Append(Environment.NewLine); 49 break; 50 51 case DBStatus.E_CANTCREATE: 52 Debug.Assert(false, "CommandParameterStatus: unexpected E_CANTCREATE"); 53 goto default; 54 55 case DBStatus.E_UNAVAILABLE: 56 builder.Append(Res.GetString(Res.OleDb_CommandParameterUnavailable,index.ToString(CultureInfo.InvariantCulture), "")); 57 builder.Append(Environment.NewLine); 58 break; 59 60 case DBStatus.E_PERMISSIONDENIED: 61 Debug.Assert(false, "CommandParameterStatus: unexpected E_PERMISSIONDENIED"); 62 goto default; 63 64 case DBStatus.E_INTEGRITYVIOLATION: 65 Debug.Assert(false, "CommandParameterStatus: unexpected E_INTEGRITYVIOLATION"); 66 goto default; 67 68 case DBStatus.E_SCHEMAVIOLATION: 69 Debug.Assert(false, "CommandParameterStatus: unexpected E_SCHEMAVIOLATION"); 70 goto default; 71 72 case DBStatus.E_BADSTATUS: 73 Debug.Assert(false, "CommandParameterStatus: unexpected E_BADSTATUS"); 74 goto default; 75 76 case DBStatus.S_DEFAULT: // MDAC 66626 77 builder.Append(Res.GetString(Res.OleDb_CommandParameterDefault,index.ToString(CultureInfo.InvariantCulture), "")); 78 builder.Append(Environment.NewLine); 79 break; 80 81 default: 82 builder.Append(Res.GetString(Res.OleDb_CommandParameterError, index.ToString(CultureInfo.InvariantCulture), status.ToString())); 83 builder.Append(Environment.NewLine); 84 break; 85 } 86 } CommandParameterStatus(string value, Exception inner)87 static internal Exception CommandParameterStatus(string value, Exception inner) { 88 if (ADP.IsEmpty(value)) { return inner; } 89 return ADP.InvalidOperation(value, inner); 90 } UninitializedParameters(int index, OleDbType dbtype)91 static internal Exception UninitializedParameters(int index, OleDbType dbtype) { 92 return ADP.InvalidOperation(Res.GetString(Res.OleDb_UninitializedParameters, index.ToString(CultureInfo.InvariantCulture), dbtype.ToString())); 93 } BadStatus_ParamAcc(int index, DBBindStatus status)94 static internal Exception BadStatus_ParamAcc(int index, DBBindStatus status) { 95 return ADP.DataAdapter(Res.GetString(Res.OleDb_BadStatus_ParamAcc, index.ToString(CultureInfo.InvariantCulture), status.ToString())); 96 } NoProviderSupportForParameters(string provider, Exception inner)97 static internal Exception NoProviderSupportForParameters(string provider, Exception inner) { 98 return ADP.DataAdapter(Res.GetString(Res.OleDb_NoProviderSupportForParameters, provider), inner); 99 } NoProviderSupportForSProcResetParameters(string provider)100 static internal Exception NoProviderSupportForSProcResetParameters(string provider) { 101 return ADP.DataAdapter(Res.GetString(Res.OleDb_NoProviderSupportForSProcResetParameters, provider)); 102 } 103 104 // OleDbProperties PropsetSetFailure(StringBuilder builder, string description, OleDbPropertyStatus status)105 static internal void PropsetSetFailure(StringBuilder builder, string description, OleDbPropertyStatus status) { 106 if (OleDbPropertyStatus.Ok == status) { 107 return; 108 } 109 switch (status) { 110 case OleDbPropertyStatus.NotSupported: 111 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 112 builder.Append(Res.GetString(Res.OleDb_PropertyNotSupported, description)); 113 break; 114 case OleDbPropertyStatus.BadValue: 115 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 116 builder.Append(Res.GetString(Res.OleDb_PropertyBadValue, description)); 117 break; 118 case OleDbPropertyStatus.BadOption: 119 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 120 builder.Append(Res.GetString(Res.OleDb_PropertyBadOption, description)); 121 break; 122 case OleDbPropertyStatus.BadColumn: 123 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 124 builder.Append(Res.GetString(Res.OleDb_PropertyBadColumn, description)); 125 break; 126 case OleDbPropertyStatus.NotAllSettable: 127 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 128 builder.Append(Res.GetString(Res.OleDb_PropertyNotAllSettable, description)); 129 break; 130 case OleDbPropertyStatus.NotSettable: 131 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 132 builder.Append(Res.GetString(Res.OleDb_PropertyNotSettable, description)); 133 break; 134 case OleDbPropertyStatus.NotSet: 135 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 136 builder.Append(Res.GetString(Res.OleDb_PropertyNotSet, description)); 137 break; 138 case OleDbPropertyStatus.Conflicting: 139 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 140 builder.Append(Res.GetString(Res.OleDb_PropertyConflicting, description)); 141 break; 142 case OleDbPropertyStatus.NotAvailable: 143 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 144 builder.Append(Res.GetString(Res.OleDb_PropertyNotAvailable, description)); 145 break; 146 default: 147 if (0 < builder.Length) { builder.Append(Environment.NewLine); } 148 builder.Append(Res.GetString(Res.OleDb_PropertyStatusUnknown, ((int) status).ToString(CultureInfo.InvariantCulture))); 149 break; 150 } 151 } PropsetSetFailure(string value, Exception inner)152 static internal Exception PropsetSetFailure(string value, Exception inner) { 153 if (ADP.IsEmpty(value)) { return inner; } 154 return ADP.InvalidOperation(value, inner); 155 } 156 157 // OleDbConnection SchemaRowsetsNotSupported(string provider)158 static internal ArgumentException SchemaRowsetsNotSupported(string provider) { 159 return ADP.Argument(Res.GetString(Res.OleDb_SchemaRowsetsNotSupported, "IDBSchemaRowset", provider)); 160 } NoErrorInformation(string provider, OleDbHResult hr, Exception inner)161 static internal OleDbException NoErrorInformation(string provider, OleDbHResult hr, Exception inner) { 162 OleDbException e; 163 if (!ADP.IsEmpty(provider)) { 164 e = new OleDbException(Res.GetString(Res.OleDb_NoErrorInformation2, provider, ODB.ELookup(hr)), hr, inner); 165 } 166 else { 167 e = new OleDbException(Res.GetString(Res.OleDb_NoErrorInformation, ODB.ELookup(hr)), hr, inner); 168 } 169 ADP.TraceExceptionAsReturnValue(e); 170 return e; 171 } MDACNotAvailable(Exception inner)172 static internal InvalidOperationException MDACNotAvailable(Exception inner) { 173 return ADP.DataAdapter(Res.GetString(Res.OleDb_MDACNotAvailable), inner); 174 } MSDASQLNotSupported()175 static internal ArgumentException MSDASQLNotSupported() { 176 return ADP.Argument(Res.GetString(Res.OleDb_MSDASQLNotSupported)); // MDAC 69975 177 } CommandTextNotSupported(string provider, Exception inner)178 static internal InvalidOperationException CommandTextNotSupported(string provider, Exception inner) { 179 return ADP.DataAdapter(Res.GetString(Res.OleDb_CommandTextNotSupported, provider), inner); // 72632 180 } PossiblePromptNotUserInteractive()181 static internal InvalidOperationException PossiblePromptNotUserInteractive() { 182 return ADP.DataAdapter(Res.GetString(Res.OleDb_PossiblePromptNotUserInteractive)); 183 } ProviderUnavailable(string provider, Exception inner)184 static internal InvalidOperationException ProviderUnavailable(string provider, Exception inner) { 185 //return new OleDbException(Res.GetString(Res.OleDb_ProviderUnavailable, provider), (int)OleDbHResult.CO_E_CLASSSTRING, inner); 186 return ADP.DataAdapter(Res.GetString(Res.OleDb_ProviderUnavailable, provider), inner); 187 } TransactionsNotSupported(string provider, Exception inner)188 static internal InvalidOperationException TransactionsNotSupported(string provider, Exception inner) { 189 return ADP.DataAdapter(Res.GetString(Res.OleDb_TransactionsNotSupported, provider), inner); // 72632 190 } AsynchronousNotSupported()191 static internal ArgumentException AsynchronousNotSupported() { 192 return ADP.Argument(Res.GetString(Res.OleDb_AsynchronousNotSupported)); 193 } NoProviderSpecified()194 static internal ArgumentException NoProviderSpecified() { 195 return ADP.Argument(Res.GetString(Res.OleDb_NoProviderSpecified)); 196 } InvalidProviderSpecified()197 static internal ArgumentException InvalidProviderSpecified() { 198 return ADP.Argument(Res.GetString(Res.OleDb_InvalidProviderSpecified)); 199 } InvalidRestrictionsDbInfoKeywords(string parameter)200 static internal ArgumentException InvalidRestrictionsDbInfoKeywords(string parameter) { 201 return ADP.Argument(Res.GetString(Res.OleDb_InvalidRestrictionsDbInfoKeywords), parameter); 202 } InvalidRestrictionsDbInfoLiteral(string parameter)203 static internal ArgumentException InvalidRestrictionsDbInfoLiteral(string parameter) { 204 return ADP.Argument(Res.GetString(Res.OleDb_InvalidRestrictionsDbInfoLiteral), parameter); 205 } InvalidRestrictionsSchemaGuids(string parameter)206 static internal ArgumentException InvalidRestrictionsSchemaGuids(string parameter) { 207 return ADP.Argument(Res.GetString(Res.OleDb_InvalidRestrictionsSchemaGuids), parameter); 208 } NotSupportedSchemaTable(Guid schema, OleDbConnection connection)209 static internal ArgumentException NotSupportedSchemaTable(Guid schema, OleDbConnection connection) { 210 return ADP.Argument(Res.GetString(Res.OleDb_NotSupportedSchemaTable, OleDbSchemaGuid.GetTextFromValue(schema), connection.Provider)); 211 } 212 213 // OleDbParameter InvalidOleDbType(OleDbType value)214 static internal Exception InvalidOleDbType(OleDbType value) { 215 return ADP.InvalidEnumerationValue(typeof(OleDbType), (int)value); 216 } 217 218 // Getting Data BadAccessor()219 static internal InvalidOperationException BadAccessor() { 220 return ADP.DataAdapter(Res.GetString(Res.OleDb_BadAccessor)); 221 } ConversionRequired()222 static internal InvalidCastException ConversionRequired() { 223 return ADP.InvalidCast(); 224 } CantConvertValue()225 static internal InvalidCastException CantConvertValue() { 226 return ADP.InvalidCast(Res.GetString(Res.OleDb_CantConvertValue)); 227 } SignMismatch(Type type)228 static internal InvalidOperationException SignMismatch(Type type) { 229 return ADP.DataAdapter(Res.GetString(Res.OleDb_SignMismatch, type.Name)); 230 } DataOverflow(Type type)231 static internal InvalidOperationException DataOverflow(Type type) { 232 return ADP.DataAdapter(Res.GetString(Res.OleDb_DataOverflow, type.Name)); 233 } CantCreate(Type type)234 static internal InvalidOperationException CantCreate(Type type) { 235 return ADP.DataAdapter(Res.GetString(Res.OleDb_CantCreate, type.Name)); 236 } Unavailable(Type type)237 static internal InvalidOperationException Unavailable(Type type) { 238 return ADP.DataAdapter(Res.GetString(Res.OleDb_Unavailable, type.Name)); 239 } UnexpectedStatusValue(DBStatus status)240 static internal InvalidOperationException UnexpectedStatusValue(DBStatus status) { 241 return ADP.DataAdapter(Res.GetString(Res.OleDb_UnexpectedStatusValue, status.ToString())); 242 } GVtUnknown(int wType)243 static internal InvalidOperationException GVtUnknown(int wType) { 244 return ADP.DataAdapter(Res.GetString(Res.OleDb_GVtUnknown, wType.ToString("X4", CultureInfo.InvariantCulture), wType.ToString(CultureInfo.InvariantCulture))); 245 } SVtUnknown(int wType)246 static internal InvalidOperationException SVtUnknown(int wType) { 247 return ADP.DataAdapter(Res.GetString(Res.OleDb_SVtUnknown, wType.ToString("X4", CultureInfo.InvariantCulture), wType.ToString(CultureInfo.InvariantCulture))); 248 } 249 250 // OleDbDataReader BadStatusRowAccessor(int i, DBBindStatus rowStatus)251 static internal InvalidOperationException BadStatusRowAccessor(int i, DBBindStatus rowStatus) { 252 return ADP.DataAdapter(Res.GetString(Res.OleDb_BadStatusRowAccessor, i.ToString(CultureInfo.InvariantCulture), rowStatus.ToString())); 253 } ThreadApartmentState(Exception innerException)254 static internal InvalidOperationException ThreadApartmentState(Exception innerException) { 255 return ADP.InvalidOperation(Res.GetString(Res.OleDb_ThreadApartmentState), innerException); 256 } 257 258 // OleDbDataAdapter Fill_NotADODB(string parameter)259 static internal ArgumentException Fill_NotADODB(string parameter) { 260 return ADP.Argument(Res.GetString(Res.OleDb_Fill_NotADODB), parameter); 261 } Fill_EmptyRecordSet(string parameter, Exception innerException)262 static internal ArgumentException Fill_EmptyRecordSet(string parameter, Exception innerException) { 263 return ADP.Argument(Res.GetString(Res.OleDb_Fill_EmptyRecordSet, "IRowset"), parameter, innerException); 264 } Fill_EmptyRecord(string parameter, Exception innerException)265 static internal ArgumentException Fill_EmptyRecord(string parameter, Exception innerException) { 266 return ADP.Argument(Res.GetString(Res.OleDb_Fill_EmptyRecord), parameter, innerException); 267 } 268 NoErrorMessage(OleDbHResult errorcode)269 static internal string NoErrorMessage(OleDbHResult errorcode) { 270 return Res.GetString(Res.OleDb_NoErrorMessage, ODB.ELookup(errorcode)); 271 } FailedGetDescription(OleDbHResult errorcode)272 static internal string FailedGetDescription(OleDbHResult errorcode) { 273 return Res.GetString(Res.OleDb_FailedGetDescription, ODB.ELookup(errorcode)); 274 } FailedGetSource(OleDbHResult errorcode)275 static internal string FailedGetSource(OleDbHResult errorcode) { 276 return Res.GetString(Res.OleDb_FailedGetSource, ODB.ELookup(errorcode)); 277 } 278 DBBindingGetVector()279 static internal InvalidOperationException DBBindingGetVector() { 280 return ADP.InvalidOperation(Res.GetString(Res.OleDb_DBBindingGetVector)); 281 } 282 GetErrorDescription(UnsafeNativeMethods.IErrorInfo errorInfo, OleDbHResult hresult, out string message)283 static internal OleDbHResult GetErrorDescription(UnsafeNativeMethods.IErrorInfo errorInfo, OleDbHResult hresult, out string message) { 284 Bid.Trace("<oledb.IErrorInfo.GetDescription|API|OS>\n"); 285 OleDbHResult hr = errorInfo.GetDescription(out message); 286 Bid.Trace("<oledb.IErrorInfo.GetDescription|API|OS|RET> %08X{HRESULT}, Message='%ls'\n", hr, message); 287 if (((int)hr < 0) && ADP.IsEmpty(message)) { 288 message = FailedGetDescription(hr) + Environment.NewLine + ODB.ELookup(hresult); 289 } 290 if (ADP.IsEmpty(message)) { 291 message = ODB.ELookup(hresult); 292 } 293 return hr; 294 } 295 296 // OleDbEnumerator ISourcesRowsetNotSupported()297 internal static ArgumentException ISourcesRowsetNotSupported() { 298 throw ADP.Argument(Res.OleDb_ISourcesRowsetNotSupported); 299 } 300 301 // OleDbMetaDataFactory IDBInfoNotSupported()302 static internal InvalidOperationException IDBInfoNotSupported() { 303 return ADP.InvalidOperation(Res.GetString(Res.OleDb_IDBInfoNotSupported)); 304 } 305 306 // explictly used error codes 307 internal const int ADODB_AlreadyClosedError = unchecked((int)0x800A0E78); 308 internal const int ADODB_NextResultError = unchecked((int)0x800A0CB3); 309 310 // internal command states 311 internal const int InternalStateExecuting = (int) (ConnectionState.Open | ConnectionState.Executing); 312 internal const int InternalStateFetching = (int) (ConnectionState.Open | ConnectionState.Fetching); 313 internal const int InternalStateClosed = (int) (ConnectionState.Closed); 314 315 internal const int ExecutedIMultipleResults = 0; 316 internal const int ExecutedIRowset = 1; 317 internal const int ExecutedIRow = 2; 318 internal const int PrepareICommandText = 3; 319 320 // internal connection states, a superset of the command states 321 internal const int InternalStateExecutingNot = (int) ~(ConnectionState.Executing); 322 internal const int InternalStateFetchingNot = (int) ~(ConnectionState.Fetching); 323 internal const int InternalStateConnecting = (int) (ConnectionState.Connecting); 324 internal const int InternalStateOpen = (int) (ConnectionState.Open); 325 326 // constants used to trigger from binding as WSTR to BYREF|WSTR 327 // used by OleDbCommand, OleDbDataReader 328 internal const int LargeDataSize = (1 << 13); // 8K 329 internal const int CacheIncrement = 10; 330 331 // constants used by OleDbDataReader 332 internal static readonly IntPtr DBRESULTFLAG_DEFAULT = IntPtr.Zero; 333 334 internal const short VARIANT_TRUE = -1; 335 internal const short VARIANT_FALSE = 0; 336 337 // OleDbConnection constants 338 internal const int CLSCTX_ALL = /*CLSCTX_INPROC_SERVER*/1 | /*CLSCTX_INPROC_HANDLER*/2 | /*CLSCTX_LOCAL_SERVER*/4 | /*CLSCTX_REMOTE_SERVER*/16; 339 internal const int MaxProgIdLength = 255; 340 341 internal const int DBLITERAL_CATALOG_SEPARATOR = 3; 342 internal const int DBLITERAL_QUOTE_PREFIX = 15; 343 internal const int DBLITERAL_QUOTE_SUFFIX = 28; 344 internal const int DBLITERAL_SCHEMA_SEPARATOR = 27; 345 internal const int DBLITERAL_TABLE_NAME = 17; 346 internal const int DBPROP_ACCESSORDER = 0xe7; 347 348 internal const int DBPROP_AUTH_CACHE_AUTHINFO = 0x5; 349 internal const int DBPROP_AUTH_ENCRYPT_PASSWORD= 0x6; 350 internal const int DBPROP_AUTH_INTEGRATED = 0x7; 351 internal const int DBPROP_AUTH_MASK_PASSWORD = 0x8; 352 internal const int DBPROP_AUTH_PASSWORD = 0x9; 353 internal const int DBPROP_AUTH_PERSIST_ENCRYPTED = 0xa; 354 internal const int DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO = 0xb; 355 internal const int DBPROP_AUTH_USERID = 0xc; 356 357 internal const int DBPROP_CATALOGLOCATION = 0x16; 358 internal const int DBPROP_COMMANDTIMEOUT = 0x22; 359 internal const int DBPROP_CONNECTIONSTATUS = 0xf4; 360 internal const int DBPROP_CURRENTCATALOG = 0x25; 361 internal const int DBPROP_DATASOURCENAME = 0x26; 362 internal const int DBPROP_DBMSNAME = 0x28; 363 internal const int DBPROP_DBMSVER = 0x29; 364 internal const int DBPROP_GROUPBY = 0x2c; 365 internal const int DBPROP_HIDDENCOLUMNS = 0x102; 366 internal const int DBPROP_IColumnsRowset = 0x7b; 367 internal const int DBPROP_IDENTIFIERCASE = 0x2e; 368 369 internal const int DBPROP_INIT_ASYNCH = 0xc8; 370 internal const int DBPROP_INIT_BINDFLAGS = 0x10e; 371 internal const int DBPROP_INIT_CATALOG = 0xe9; 372 internal const int DBPROP_INIT_DATASOURCE = 0x3b; 373 internal const int DBPROP_INIT_GENERALTIMEOUT = 0x11c; 374 internal const int DBPROP_INIT_HWND = 0x3c; 375 internal const int DBPROP_INIT_IMPERSONATION_LEVEL = 0x3d; 376 internal const int DBPROP_INIT_LCID = 0xba; 377 internal const int DBPROP_INIT_LOCATION = 0x3e; 378 internal const int DBPROP_INIT_LOCKOWNER = 0x10f; 379 internal const int DBPROP_INIT_MODE = 0x3f; 380 internal const int DBPROP_INIT_OLEDBSERVICES = 0xf8; 381 internal const int DBPROP_INIT_PROMPT = 0x40; 382 internal const int DBPROP_INIT_PROTECTION_LEVEL= 0x41; 383 internal const int DBPROP_INIT_PROVIDERSTRING = 0xa0; 384 internal const int DBPROP_INIT_TIMEOUT = 0x42; 385 386 internal const int DBPROP_IRow = 0x107; 387 internal const int DBPROP_MAXROWS = 0x49; 388 internal const int DBPROP_MULTIPLERESULTS = 0xc4; 389 internal const int DBPROP_ORDERBYCOLUNSINSELECT= 0x55; 390 internal const int DBPROP_PROVIDERFILENAME = 0x60; 391 internal const int DBPROP_QUOTEDIDENTIFIERCASE = 0x64; 392 internal const int DBPROP_RESETDATASOURCE = 0xf7; 393 internal const int DBPROP_SQLSUPPORT = 0x6d; 394 internal const int DBPROP_UNIQUEROWS = 0xee; 395 396 // property status 397 internal const int DBPROPSTATUS_OK = 0; 398 internal const int DBPROPSTATUS_NOTSUPPORTED = 1; 399 internal const int DBPROPSTATUS_BADVALUE = 2; 400 internal const int DBPROPSTATUS_BADOPTION = 3; 401 internal const int DBPROPSTATUS_BADCOLUMN = 4; 402 internal const int DBPROPSTATUS_NOTALLSETTABLE = 5; 403 internal const int DBPROPSTATUS_NOTSETTABLE = 6; 404 internal const int DBPROPSTATUS_NOTSET = 7; 405 internal const int DBPROPSTATUS_CONFLICTING = 8; 406 internal const int DBPROPSTATUS_NOTAVAILABLE = 9; 407 408 internal const int DBPROPOPTIONS_REQUIRED = 0; 409 internal const int DBPROPOPTIONS_OPTIONAL = 1; 410 411 internal const int DBPROPFLAGS_WRITE = 0x400; 412 internal const int DBPROPFLAGS_SESSION = 0x1000; 413 414 // misc. property values 415 internal const int DBPROPVAL_AO_RANDOM = 2; 416 417 internal const int DBPROPVAL_CL_END = 2; 418 internal const int DBPROPVAL_CL_START = 1; 419 420 internal const int DBPROPVAL_CS_COMMUNICATIONFAILURE = 2; 421 internal const int DBPROPVAL_CS_INITIALIZED = 1; 422 internal const int DBPROPVAL_CS_UNINITIALIZED = 0; 423 424 internal const int DBPROPVAL_GB_COLLATE = 16; 425 internal const int DBPROPVAL_GB_CONTAINS_SELECT = 4; 426 internal const int DBPROPVAL_GB_EQUALS_SELECT = 2; 427 internal const int DBPROPVAL_GB_NO_RELATION = 8; 428 internal const int DBPROPVAL_GB_NOT_SUPPORTED = 1; 429 430 internal const int DBPROPVAL_IC_LOWER = 2; 431 internal const int DBPROPVAL_IC_MIXED = 8; 432 internal const int DBPROPVAL_IC_SENSITIVE = 4; 433 internal const int DBPROPVAL_IC_UPPER = 1; 434 435 internal const int DBPROPVAL_IN_ALLOWNULL = 0x00000000; 436 /*internal const int DBPROPVAL_IN_DISALLOWNULL = 0x00000001; 437 internal const int DBPROPVAL_IN_IGNORENULL = 0x00000002; 438 internal const int DBPROPVAL_IN_IGNOREANYNULL = 0x00000004;*/ 439 internal const int DBPROPVAL_MR_NOTSUPPORTED = 0; 440 441 internal const int DBPROPVAL_RD_RESETALL = unchecked((int) 0xffffffff); 442 443 internal const int DBPROPVAL_OS_RESOURCEPOOLING = 0x00000001; 444 internal const int DBPROPVAL_OS_TXNENLISTMENT = 0x00000002; 445 internal const int DBPROPVAL_OS_CLIENTCURSOR = 0x00000004; 446 internal const int DBPROPVAL_OS_AGR_AFTERSESSION = 0x00000008; 447 internal const int DBPROPVAL_SQL_ODBC_MINIMUM = 1; 448 internal const int DBPROPVAL_SQL_ESCAPECLAUSES = 0x00000100; 449 450 // OLE DB providers never return pGuid-style bindings. 451 // 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). 452 internal const int DBKIND_GUID_NAME = 0; 453 internal const int DBKIND_GUID_PROPID = 1; 454 internal const int DBKIND_NAME = 2; 455 internal const int DBKIND_PGUID_NAME = 3; 456 internal const int DBKIND_PGUID_PROPID = 4; 457 internal const int DBKIND_PROPID = 5; 458 internal const int DBKIND_GUID = 6; 459 460 internal const int DBCOLUMNFLAGS_ISBOOKMARK = 0x01; 461 internal const int DBCOLUMNFLAGS_ISLONG = 0x80; 462 internal const int DBCOLUMNFLAGS_ISFIXEDLENGTH = 0x10; 463 internal const int DBCOLUMNFLAGS_ISNULLABLE = 0x20; 464 internal const int DBCOLUMNFLAGS_ISROWSET = 0x100000; 465 internal const int DBCOLUMNFLAGS_ISROW = 0x200000; 466 internal const int DBCOLUMNFLAGS_ISROWSET_DBCOLUMNFLAGS_ISROW = /*DBCOLUMNFLAGS_ISROWSET*/0x100000 | /*DBCOLUMNFLAGS_ISROW*/0x200000; 467 internal const int DBCOLUMNFLAGS_ISLONG_DBCOLUMNFLAGS_ISSTREAM = /*DBCOLUMNFLAGS_ISLONG*/0x80 | /*DBCOLUMNFLAGS_ISSTREAM*/0x80000; 468 internal const int DBCOLUMNFLAGS_ISROWID_DBCOLUMNFLAGS_ISROWVER = /*DBCOLUMNFLAGS_ISROWID*/0x100 | /*DBCOLUMNFLAGS_ISROWVER*/0x200; 469 internal const int DBCOLUMNFLAGS_WRITE_DBCOLUMNFLAGS_WRITEUNKNOWN = /*DBCOLUMNFLAGS_WRITE*/0x4 | /*DBCOLUMNFLAGS_WRITEUNKNOWN*/0x8; 470 internal const int DBCOLUMNFLAGS_ISNULLABLE_DBCOLUMNFLAGS_MAYBENULL = /*DBCOLUMNFLAGS_ISNULLABLE*/0x20 | /*DBCOLUMNFLAGS_MAYBENULL*/0x40; 471 472 // accessor constants 473 internal const int DBACCESSOR_ROWDATA = 0x2; 474 internal const int DBACCESSOR_PARAMETERDATA = 0x4; 475 476 // commandbuilder constants 477 internal const int DBPARAMTYPE_INPUT = 0x01; 478 internal const int DBPARAMTYPE_INPUTOUTPUT = 0x02; 479 internal const int DBPARAMTYPE_OUTPUT = 0x03; 480 internal const int DBPARAMTYPE_RETURNVALUE = 0x04; 481 482 // parameter constants 483 /*internal const int DBPARAMIO_NOTPARAM = 0; 484 internal const int DBPARAMIO_INPUT = 0x1; 485 internal const int DBPARAMIO_OUTPUT = 0x2;*/ 486 487 /*internal const int DBPARAMFLAGS_ISINPUT = 0x1; 488 internal const int DBPARAMFLAGS_ISOUTPUT = 0x2; 489 internal const int DBPARAMFLAGS_ISSIGNED = 0x10; 490 internal const int DBPARAMFLAGS_ISNULLABLE = 0x40; 491 internal const int DBPARAMFLAGS_ISLONG = 0x80;*/ 492 493 internal const int ParameterDirectionFlag = 3; 494 495 // values of the searchable column in the provider types schema rowset 496 internal const uint DB_UNSEARCHABLE = 1; 497 internal const uint DB_LIKE_ONLY = 2; 498 internal const uint DB_ALL_EXCEPT_LIKE = 3; 499 internal const uint DB_SEARCHABLE = 4; 500 501 static internal readonly IntPtr DB_INVALID_HACCESSOR = ADP.PtrZero; 502 static internal readonly IntPtr DB_NULL_HCHAPTER = ADP.PtrZero; 503 static internal readonly IntPtr DB_NULL_HROW = ADP.PtrZero; 504 505 /*static internal readonly int SizeOf_tagDBPARAMINFO = Marshal.SizeOf(typeof(tagDBPARAMINFO));*/ 506 static internal readonly int SizeOf_tagDBBINDING = Marshal.SizeOf(typeof(tagDBBINDING)); 507 static internal readonly int SizeOf_tagDBCOLUMNINFO = Marshal.SizeOf(typeof(tagDBCOLUMNINFO)); 508 static internal readonly int SizeOf_tagDBLITERALINFO = Marshal.SizeOf(typeof(tagDBLITERALINFO)); 509 static internal readonly int SizeOf_tagDBPROPSET = Marshal.SizeOf(typeof(tagDBPROPSET)); 510 static internal readonly int SizeOf_tagDBPROP = Marshal.SizeOf(typeof(tagDBPROP)); 511 static internal readonly int SizeOf_tagDBPROPINFOSET = Marshal.SizeOf(typeof(tagDBPROPINFOSET)); 512 static internal readonly int SizeOf_tagDBPROPINFO = Marshal.SizeOf(typeof(tagDBPROPINFO)); 513 static internal readonly int SizeOf_tagDBPROPIDSET = Marshal.SizeOf(typeof(tagDBPROPIDSET)); 514 static internal readonly int SizeOf_Guid = Marshal.SizeOf(typeof(Guid)); 515 static internal readonly int SizeOf_Variant = 8 + (2 * ADP.PtrSize); // 16 on 32bit, 24 on 64bit 516 517 static internal readonly int OffsetOf_tagDBPROP_Status = Marshal.OffsetOf(typeof(tagDBPROP), "dwStatus").ToInt32(); 518 static internal readonly int OffsetOf_tagDBPROP_Value = Marshal.OffsetOf(typeof(tagDBPROP), "vValue").ToInt32(); 519 static internal readonly int OffsetOf_tagDBPROPSET_Properties = Marshal.OffsetOf(typeof(tagDBPROPSET), "rgProperties").ToInt32(); 520 static internal readonly int OffsetOf_tagDBPROPINFO_Value = Marshal.OffsetOf(typeof(tagDBPROPINFO), "vValue").ToInt32(); 521 static internal readonly int OffsetOf_tagDBPROPIDSET_PropertySet = Marshal.OffsetOf(typeof(tagDBPROPIDSET), "guidPropertySet").ToInt32(); 522 static internal readonly int OffsetOf_tagDBLITERALINFO_it = Marshal.OffsetOf(typeof(tagDBLITERALINFO), "it").ToInt32(); 523 static internal readonly int OffsetOf_tagDBBINDING_obValue = Marshal.OffsetOf(typeof(tagDBBINDING), "obValue").ToInt32(); 524 static internal readonly int OffsetOf_tagDBBINDING_wType = Marshal.OffsetOf(typeof(tagDBBINDING), "wType").ToInt32(); 525 526 static internal Guid IID_NULL = Guid.Empty; 527 static internal Guid IID_IUnknown = new Guid(0x00000000,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46); 528 static internal Guid IID_IDBInitialize = new Guid(0x0C733A8B,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 529 static internal Guid IID_IDBCreateSession = new Guid(0x0C733A5D,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 530 static internal Guid IID_IDBCreateCommand = new Guid(0x0C733A1D,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 531 static internal Guid IID_ICommandText = new Guid(0x0C733A27,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 532 static internal Guid IID_IMultipleResults = new Guid(0x0C733A90,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 533 static internal Guid IID_IRow = new Guid(0x0C733AB4,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 534 static internal Guid IID_IRowset = new Guid(0x0C733A7C,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 535 static internal Guid IID_ISQLErrorInfo = new Guid(0x0C733A74,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 536 537 static internal Guid CLSID_DataLinks = new Guid(0x2206CDB2,0x19C1,0x11D1,0x89,0xE0,0x00,0xC0,0x4F,0xD7,0xA8,0x29); 538 539 static internal Guid DBGUID_DEFAULT = new Guid(0xc8b521fb,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); 540 static internal Guid DBGUID_ROWSET = new Guid(0xc8b522f6,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); 541 static internal Guid DBGUID_ROW = new Guid(0xc8b522f7,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); 542 543 static internal Guid DBGUID_ROWDEFAULTSTREAM = new Guid(0x0C733AB7,0x2A1C,0x11CE,0xAD,0xE5,0x00,0xAA,0x00,0x44,0x77,0x3D); 544 545 static internal readonly Guid CLSID_MSDASQL = new Guid(0xc8b522cb,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); 546 547 static internal readonly object DBCOL_SPECIALCOL = new Guid(0xc8b52232,0x5cf3,0x11ce,0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d); 548 549 static internal readonly char[] ErrorTrimCharacters = new char[] { '\r', '\n', '\0' }; // MDAC 73707 550 551 // used by ConnectionString hashtable, must be all lowercase 552 internal const string Asynchronous_Processing = "asynchronous processing"; 553 internal const string AttachDBFileName = "attachdbfilename"; 554 internal const string Connect_Timeout = "connect timeout"; 555 internal const string Data_Source = "data source"; 556 internal const string File_Name = "file name"; 557 internal const string Initial_Catalog = "initial catalog"; 558 internal const string Password = "password"; 559 internal const string Persist_Security_Info = "persist security info"; 560 internal const string Provider = "provider"; 561 internal const string Pwd = "pwd"; 562 internal const string User_ID = "user id"; 563 564 // used by OleDbConnection as property names 565 internal const string Current_Catalog = "current catalog"; 566 internal const string DBMS_Version = "dbms version"; 567 internal const string Properties = "Properties"; 568 569 // used by OleDbConnection to create and verify OLE DB Services 570 internal const string DataLinks_CLSID = "CLSID\\{2206CDB2-19C1-11D1-89E0-00C04FD7A829}\\InprocServer32"; 571 internal const string OLEDB_SERVICES = "OLEDB_SERVICES"; 572 573 // used by OleDbConnection to eliminate post-open detection of 'Microsoft OLE DB Provider for ODBC Drivers' 574 internal const string DefaultDescription_MSDASQL = "microsoft ole db provider for odbc drivers"; 575 internal const string MSDASQL = "msdasql"; 576 internal const string MSDASQLdot = "msdasql."; 577 578 // used by OleDbPermission 579 internal const string _Add = "add"; 580 internal const string _Keyword = "keyword"; 581 internal const string _Name = "name"; 582 internal const string _Value = "value"; 583 584 // IColumnsRowset column names 585 internal const string DBCOLUMN_BASECATALOGNAME = "DBCOLUMN_BASECATALOGNAME"; 586 internal const string DBCOLUMN_BASECOLUMNNAME = "DBCOLUMN_BASECOLUMNNAME"; 587 internal const string DBCOLUMN_BASESCHEMANAME = "DBCOLUMN_BASESCHEMANAME"; 588 internal const string DBCOLUMN_BASETABLENAME = "DBCOLUMN_BASETABLENAME"; 589 internal const string DBCOLUMN_COLUMNSIZE = "DBCOLUMN_COLUMNSIZE"; 590 internal const string DBCOLUMN_FLAGS = "DBCOLUMN_FLAGS"; 591 internal const string DBCOLUMN_GUID = "DBCOLUMN_GUID"; 592 internal const string DBCOLUMN_IDNAME = "DBCOLUMN_IDNAME"; 593 internal const string DBCOLUMN_ISAUTOINCREMENT = "DBCOLUMN_ISAUTOINCREMENT"; 594 internal const string DBCOLUMN_ISUNIQUE = "DBCOLUMN_ISUNIQUE"; 595 internal const string DBCOLUMN_KEYCOLUMN = "DBCOLUMN_KEYCOLUMN"; 596 internal const string DBCOLUMN_NAME = "DBCOLUMN_NAME"; 597 internal const string DBCOLUMN_NUMBER = "DBCOLUMN_NUMBER"; 598 internal const string DBCOLUMN_PRECISION = "DBCOLUMN_PRECISION"; 599 internal const string DBCOLUMN_PROPID = "DBCOLUMN_PROPID"; 600 internal const string DBCOLUMN_SCALE = "DBCOLUMN_SCALE"; 601 internal const string DBCOLUMN_TYPE = "DBCOLUMN_TYPE"; 602 internal const string DBCOLUMN_TYPEINFO = "DBCOLUMN_TYPEINFO"; 603 604 // ISchemaRowset.GetRowset(OleDbSchemaGuid.Indexes) column names 605 internal const string PRIMARY_KEY = "PRIMARY_KEY"; 606 internal const string UNIQUE = "UNIQUE"; 607 internal const string COLUMN_NAME = "COLUMN_NAME"; 608 internal const string NULLS = "NULLS"; 609 internal const string INDEX_NAME = "INDEX_NAME"; 610 611 // ISchemaRowset.GetSchemaRowset(OleDbSchemaGuid.Procedure_Parameters) column names 612 internal const string PARAMETER_NAME = "PARAMETER_NAME"; 613 internal const string ORDINAL_POSITION = "ORDINAL_POSITION"; 614 internal const string PARAMETER_TYPE = "PARAMETER_TYPE"; 615 internal const string IS_NULLABLE = "IS_NULLABLE"; 616 internal const string DATA_TYPE = "DATA_TYPE"; 617 internal const string CHARACTER_MAXIMUM_LENGTH = "CHARACTER_MAXIMUM_LENGTH"; 618 internal const string NUMERIC_PRECISION = "NUMERIC_PRECISION"; 619 internal const string NUMERIC_SCALE = "NUMERIC_SCALE"; 620 internal const string TYPE_NAME = "TYPE_NAME"; 621 622 // DataTable.Select to sort on ordinal position for OleDbSchemaGuid.Procedure_Parameters 623 internal const string ORDINAL_POSITION_ASC = "ORDINAL_POSITION ASC"; 624 625 // OleDbConnection.GetOleDbSchemmaTable(OleDbSchemaGuid.SchemaGuids) table and column names 626 internal const string SchemaGuids = "SchemaGuids"; 627 internal const string Schema = "Schema"; 628 internal const string RestrictionSupport = "RestrictionSupport"; 629 630 // OleDbConnection.GetOleDbSchemmaTable(OleDbSchemaGuid.DbInfoKeywords) table and column names 631 internal const string DbInfoKeywords = "DbInfoKeywords"; 632 internal const string Keyword = "Keyword"; 633 634 // Debug error string writeline ELookup(OleDbHResult hr)635 static internal string ELookup(OleDbHResult hr) { 636 StringBuilder builder = new StringBuilder(); 637 builder.Append(hr.ToString()); 638 if ((0 < builder.Length) && Char.IsDigit(builder[0])) { 639 builder.Length = 0; 640 } 641 builder.Append("(0x"); 642 builder.Append(((int)hr).ToString("X8", CultureInfo.InvariantCulture)); 643 builder.Append(")"); 644 return builder.ToString(); 645 } 646 647 #if DEBUG 648 static readonly private Hashtable g_wlookpup = new Hashtable(); WLookup(short id)649 static internal string WLookup(short id) { 650 string value = (string)g_wlookpup[id]; 651 if (null == value) { 652 value = "0x" + ((short) id).ToString("X2", CultureInfo.InvariantCulture) + " " + ((short) id); 653 value += " " + ((DBTypeEnum) id).ToString(); 654 g_wlookpup[id] = value; 655 } 656 return value; 657 } 658 659 private enum DBTypeEnum { 660 EMPTY = 0, // 661 NULL = 1, // 662 I2 = 2, // 663 I4 = 3, // 664 R4 = 4, // 665 R8 = 5, // 666 CY = 6, // 667 DATE = 7, // 668 BSTR = 8, // 669 IDISPATCH = 9, // 670 ERROR = 10, // 671 BOOL = 11, // 672 VARIANT = 12, // 673 IUNKNOWN = 13, // 674 DECIMAL = 14, // 675 I1 = 16, // 676 UI1 = 17, // 677 UI2 = 18, // 678 UI4 = 19, // 679 I8 = 20, // 680 UI8 = 21, // 681 FILETIME = 64, // 2.0 682 GUID = 72, // 683 BYTES = 128, // 684 STR = 129, // 685 WSTR = 130, // 686 NUMERIC = 131, // with potential overflow 687 UDT = 132, // should never be encountered 688 DBDATE = 133, // 689 DBTIME = 134, // 690 DBTIMESTAMP = 135, // granularity reduced from 1ns to 100ns (sql is 3.33 milli seconds) 691 HCHAPTER = 136, // 1.5 692 PROPVARIANT = 138, // 2.0 - as variant 693 VARNUMERIC = 139, // 2.0 - as string else ConversionException 694 695 BYREF_I2 = 0x4002, 696 BYREF_I4 = 0x4003, 697 BYREF_R4 = 0x4004, 698 BYREF_R8 = 0x4005, 699 BYREF_CY = 0x4006, 700 BYREF_DATE = 0x4007, 701 BYREF_BSTR = 0x4008, 702 BYREF_IDISPATCH = 0x4009, 703 BYREF_ERROR = 0x400a, 704 BYREF_BOOL = 0x400b, 705 BYREF_VARIANT = 0x400c, 706 BYREF_IUNKNOWN = 0x400d, 707 BYREF_DECIMAL = 0x400e, 708 BYREF_I1 = 0x4010, 709 BYREF_UI1 = 0x4011, 710 BYREF_UI2 = 0x4012, 711 BYREF_UI4 = 0x4013, 712 BYREF_I8 = 0x4014, 713 BYREF_UI8 = 0x4015, 714 BYREF_FILETIME = 0x4040, 715 BYREF_GUID = 0x4048, 716 BYREF_BYTES = 0x4080, 717 BYREF_STR = 0x4081, 718 BYREF_WSTR = 0x4082, 719 BYREF_NUMERIC = 0x4083, 720 BYREF_UDT = 0x4084, 721 BYREF_DBDATE = 0x4085, 722 BYREF_DBTIME = 0x4086, 723 BYREF_DBTIMESTAMP = 0x4087, 724 BYREF_HCHAPTER = 0x4088, 725 BYREF_PROPVARIANT = 0x408a, 726 BYREF_VARNUMERIC = 0x408b, 727 728 VECTOR = 0x1000, 729 ARRAY = 0x2000, 730 BYREF = 0x4000, // 731 RESERVED = 0x8000, // SystemException 732 } 733 #endif 734 } 735 } 736