2016-08-03 10:59:49 +00:00
//------------------------------------------------------------------------------
// <copyright file="OLEDB_Util.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
2017-08-21 15:34:15 +00:00
// <owner current="true" primary="true">Microsoft</owner>
// <owner current="true" primary="false">Microsoft</owner>
2016-08-03 10:59:49 +00:00
//------------------------------------------------------------------------------
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 ( "<oledb.IErrorInfo.GetDescription|API|OS>\n" ) ;
OleDbHResult hr = errorInfo . GetDescription ( out message ) ;
Bid . Trace ( "<oledb.IErrorInfo.GetDescription|API|OS|RET> %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
}
}