OLEDB_Util.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / System / Data / OleDb / OLEDB_Util.cs / 1 / OLEDB_Util.cs

                            //------------------------------------------------------------------------------ 
// 
//      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
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//      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
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK