// Copyright 2001-2002 Macromedia, Inc. All rights reserved.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
function CreateVBArray(elem1,elem2,elem3,elem4)
elem1 = "" + elem1
elem2 = "" + elem2
elem3 = "" + elem3
elem4 = "" + elem4
if (Len(elem1) = 0) then
elem1 = Empty
end if
if (Len(elem2) = 0) then
elem2 = Empty
end if
if (Len(elem3) = 0) then
elem3 = Empty
end if
if (Len(elem4) = 0) then
elem4 = Empty
end if
if (elem4 = "PrimaryKeys") then
CreateVBArray = Array(elem1,elem2,elem3)
else
CreateVBArray = Array(elem1,elem2,elem3,elem4)
end if
end function
</SCRIPT>
<SCRIPT LANGUAGE=JavaScript RUNAT=Server>
function CreateMMConnection(ConnectionString,UserName,Password,Timeout)
{
var Object;
Object = new MMConnection(ConnectionString,UserName,Password,Timeout);
return Object;
}
function MMConnection(ConnectionString,UserName,Password,Timeout)
{
MMConnReconnect(this);
this.isOpen = false;
this.ConnectionString = ConnectionString;
this.UserName = String(UserName);
this.Password = String(Password);
this.Connection = Server.CreateObject("ADODB.Connection");
this.Connection.ConnectionTimeout = Timeout;
}
function MMConnReconnect(Object)
{
Object.GetODBCDSNs = ConnGetODBCDSNs;
Object.Open = ConnOpen;
Object.GetTables = ConnGetTables;
Object.GetViews = ConnGetViews;
Object.GetProcedures = ConnGetProcedures;
Object.GetColumnsOfTable = ConnGetColumns;
Object.GetPrimaryKeysOfTable = ConnGetPrimaryKeys;
Object.GetParametersOfProcedure = ConnGetParametersOfProcedure;
Object.ExecuteSQL = ConnExecuteSQL;
Object.ExecuteSP = ConnExecuteSP;
Object.ReturnsResultSet = ConnReturnsResultSet;
Object.SupportsProcedure = ConnSupportsProcedure;
Object.GetProviderTypes = ConnGetProviderTypes;
Object.HandleExceptions = ConnHandleExceptions;
Object.TestOpen = ConnIsOpen;
Object.Close = ConnClose;
}
function ConnOpen()
{
var theConnectionString = new String(this.ConnectionString);
// ????????????? OBSOLETE: begin ????????????????????????????????
if (this.UserName && this.UserName.length)
{
theConnectionString = theConnectionString + ";uid=" + this.UserName;
}
if (this.Password && this.Password.length)
{
theConnectionString = theConnectionString + ";pwd=" + this.Password;
}
// ????????????? OBSOLETE: end ????????????????????????????????
// The given connection string may not be formatted for OLE DB. It may, for example,
// be a SQL Server connection string. In such cases we need to morph it into
// an OLE DB connection string so it can be digested by the ADODB.Connection that
// we're using.
//
// For now, we are only dealing with morphing SQL Server connection strings. In the
// future, this logic may have to be expanded to deal with Oracle, Informix, etc. as
// those vendors make their own ASP.Net drivers available for use (circumventing
// the current need to go through OLE DB to access those databases).
var dbType = Request("DATABASETYPE");
if (dbType != null)
{
var strDBtype = new String(dbType);
if ((strDBtype.length > 0) && (strDBtype.toLowerCase() == "sqlserver"))
{
if (theConnectionString.charAt(0) == "\"")
{
theConnectionString = "\"Provider=SQLOLEDB;" + theConnectionString.substring(1);
}
else
{
theConnectionString = "Provider=SQLOLEDB;" + theConnectionString;
}
}
}
var aConn = ConnEval(theConnectionString);
this.Connection.Open(aConn);
this.isOpen = (this.Connection.State == adStateOpen);
}
function ConnIsOpen()
{
var xmlOutput = "";
if (this.isOpen)
{
xmlOutput = xmlOutput + "<TEST status=";
xmlOutput = xmlOutput + this.isOpen;
xmlOutput = xmlOutput + "></TEST>";
}
return xmlOutput;
}
function ConnClose()
{
if (this.Connection && this.isOpen)
{
this.Connection.Close();
}
}
function ConnGetTables(SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,"","TABLE"));
return MarshallRecordsetIntoHTML(this.Connection.OpenSchema(adSchemaTables,VBVariant));
}
return null;
}
function ConnGetViews(SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,"","VIEW"));
return MarshallRecordsetIntoHTML(this.Connection.OpenSchema(adSchemaTables,VBVariant));
}
return null;
}
function ConnGetProcedures(SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,"",""));
return MarshallRecordsetIntoHTML(this.Connection.OpenSchema(adSchemaProcedures,VBVariant));
}
return null;
}
function ConnGetColumns(TableName,SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,TableName,""));
return MarshallRecordsetIntoHTML(this.Connection.OpenSchema(adSchemaColumns,VBVariant));
}
return null;
}
function ConnGetPrimaryKeys(TableName,SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,TableName,"PrimaryKeys"));
return MarshallRecordsetIntoHTML(this.Connection.OpenSchema(adSchemaPrimaryKeys,VBVariant));
}
return null;
}
function ConnGetParametersOfProcedure(ProcedureName,SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,ProcedureName,""));
return this.Connection.OpenSchema(adSchemaProcedureParameters,VBVariant);
}
return null;
}
function ConnExecuteSQL(aStatement,MaxRows)
{
if (this.Connection && this.isOpen)
{
var oRecordset = Server.CreateObject("ADODB.Recordset");
if (oRecordset)
{
aStatement = "" + aStatement;
oRecordset.MaxRecords = MaxRows;
oRecordset.Open(aStatement,this.Connection);
return MarshallRecordsetIntoHTML(oRecordset);
}
}
return null;
}
function ConnGetProviderTypes()
{
if (this.Connection && this.isOpen)
{
return MarshallRecordsetIntoHTML(this.Connection.OpenSchema(adSchemaProviderTypes));
}
return null;
}
function ConnExecuteSP(aProcStatement,TimeOut,Parameters)
{
if (this.Connection && this.isOpen)
{
var oCommand = Server.CreateObject("ADODB.Command");
aProcStatement = "" + aProcStatement;
oCommand.CommandTimeout = TimeOut;
oCommand.CommandText = aProcStatement;
oCommand.CommandType = adCmdStoredProc;
oCommand.ActiveConnection = this.Connection;
Parameters = "" + Parameters;
if (!Parameters.length)
{
if (oCommand)
{
return MarshallRecordsetIntoHTML(oCommand.Execute());
}
}
else
{
//Substitute Parameters.
var Params = Parameters;
var ParamArray = new Array();
if (Params && Params != "undefined")
{
var cSize = 0;
for (;;)
{
var index = Params.indexOf(",");
if (index == -1)
{
index = Params.length;
}
var name = Params.substring(0,index);
Params = Params.substring(index+1,Params.length);
index = Params.indexOf(",");
if (index == -1)
{
index = Params.length;
}
var value = Params.substring(0,index);
var Pair = new Object();
Pair.name = name;
Pair.value = value;
ParamArray[cSize] = Pair;
cSize++;
if (index >= Params.length)
{
break;
}
Params = Params.substring(index+1,Params.length);
}
if (oCommand.Parameters.Count == -1)
{
//Create Parameters
var oRecordset = ConnGetParametersOfProcedure(aProcStatement);
if (oRecordset)
{
var pCount=0;
while (!oRecordset.EOF)
{
var pName = oRecordset.Fields.Item("PARAMETER_NAME").Value;
var pOrdinal = oRecordset.Fields.Item("ORDINAL_POSITION").Value;
var pType = oRecordset.Fields.Item("PARAMETER_TYPE").Value;
var pDataType = oRecordset.Fields.Item("DATA_TYPE").Value;
switch (pDataType)
{
case adBinary:
case adBSTR:
case adChar:
case adLongVarBinary:
case adLongVarChar:
case adLongVarWChar:
case adLongVarChar:
case adVarBinary:
case adVarChar:
case adVarWChar:
{
var pSize = oRecordset.Fields.Item("CHARACTER_MAXIMUM_LENGTH").Value;
}
default:
{
var pSize = null;
}
}
if ((pType == adParamInput) || (pType == adParamInputOutput))
{
var pValue = ParamArray[pName];
//if we could not find parameter by name ..try to find
//parameter by index.
if (!pValue)
{
//try the case when the parameter is set by index.
pStrCount = "" + pCount;
pValue = ParamArray[pStrCount];
}
oCommand.CreateParameter(pName,pDataType,pType,pSize,pValue);
}
else
{
var pValue = null;
oCommand.CreateParameter(pName,pDataType,pType,pSize,pValue);
}
oRecordset.MoveNext();
pCount++;
}
}
}
else
{
for (var i =0 ; i < ParamArray.length ; i++)
{
Pair = ParamArray[i];
if (Pair.value)
{
var pIndex = "" + parseInt(Pair.name);
if (pIndex == Pair.name)
{
var aParameter = oCommand.Parameters(parseInt(Pair.name));
}
else
{
var aParameter = oCommand.Parameters(Pair.name);
}
if (aParameter)
{
if ((aParameter.Direction == adParamInput) || (aParameter.Direction == adParamInputOutput))
{
aParameter.Value = Pair.value;
}
}
}
}
return MarshallRecordsetIntoHTML(oCommand.Execute());
}
}
}
}
return null;
}
function ConnReturnsResultSet(ProcedureName,SchemaName,CatalogName)
{
if (this.Connection && this.isOpen)
{
var VBVariant = new VBArray(CreateVBArray(CatalogName,SchemaName,ProcedureName,""));
var oRecordset = this.Connection.OpenSchema(adSchemaProcedureColumns,VBVariant);
var status = "true";
if (oRecordset.EOF)
{
status = "false";
}
var xmlOutput = "";
xmlOutput = xmlOutput + "<RETURNSRESULTSET status=";
xmlOutput = xmlOutput + status;
xmlOutput = xmlOutput + "></RETURNSRESULTSET>";
return xmlOutput;
}
}
function ConnSupportsProcedure()
{
if (this.Connection && this.isOpen)
{
var aProvider = "" + this.Connection.Provider;
var status = "true";
if (aProvider.indexOf("Microsoft.Jet") != -1)
{
status = "false";
}
if (aProvider.indexOf("MSDASQL")!=-1)
{
var ProviderTypes = this.Connection.OpenSchema(adSchemaProviderTypes);
if (ProviderTypes.Fields.Count > 0)
{
//Access
aProviderType = ProviderTypes.Fields(0).Value;
aProviderType = aProviderType.toLowerCase();
if (aProviderType == "guid")
{
status = "false";
}//Paradox/DBaseIII.
else if (aProviderType == "short")
{
status = "false";
}
else if (aProviderType == "image")
{
status = "false";
}
else if (aProviderType == "logical")
{
status = "false";
} //For FoxPro
else if (aProviderType == "l")
{
status = "false";
} //For MySQL....
else if (aProviderType == "tinyint")
{
status = "false";
}
}
}
var xmlOutput = "";
xmlOutput = xmlOutput + "<SUPPORTSPROCEDURE status=";
xmlOutput = xmlOutput + status;
xmlOutput = xmlOutput + "></SUPPORTSPROCEDURE>";
return xmlOutput;
}
}
function ConnHandleExceptions()
{
var xmlOutput = "";
xmlOutput = xmlOutput + "<ERRORS>";
if (this.Connection)
{
var Errors = this.Connection.Errors;
for (var i =0 ; i < Errors.Count ; i++)
{
xmlOutput = xmlOutput + "<ERROR";
xmlOutput = xmlOutput + " Identification=\""
xmlOutput = xmlOutput + Errors(i).Number;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " Source=\""
xmlOutput = xmlOutput + Errors(i).Source;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " HelpFile=\""
xmlOutput = xmlOutput + Errors(i).HelpFile;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " HelpContext=\""
xmlOutput = xmlOutput + Errors(i).HelpContext;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + "><DESCRIPTION>";
xmlOutput = xmlOutput + HTMLEncode(Errors(i).Description);
xmlOutput = xmlOutput + "</DESCRIPTION></ERROR>";
}
}
xmlOutput = xmlOutput + "</ERRORS>";
return xmlOutput;
}
function MarshallRecordsetIntoHTML(aResultSet)
{
var xmlOutput = "";
if (aResultSet)
{
xmlOutput = xmlOutput + "<RESULTSET>";
xmlOutput = xmlOutput + "<FIELDS>";
for(var i=0 ;i < aResultSet.Fields.Count ; i++)
{
xmlOutput = xmlOutput + "<FIELD";
xmlOutput = xmlOutput + " type=\"";
xmlOutput = xmlOutput + aResultSet.Fields(i).Type;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " definedSize=\"";
xmlOutput = xmlOutput + aResultSet.Fields(i).DefinedSize;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " actualsize=\"";
if (!aResultSet.EOF)
{
xmlOutput = xmlOutput + aResultSet.Fields(i).ActualSize;
}
else
{
xmlOutput = xmlOutput + "-1";
}
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " precision=\"";
xmlOutput = xmlOutput + aResultSet.Fields(i).Precision;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + " scale=\"";
xmlOutput = xmlOutput + aResultSet.Fields(i).NumericScale;
xmlOutput = xmlOutput + "\"";
xmlOutput = xmlOutput + ">";
xmlOutput = xmlOutput + "<NAME>";
xmlOutput = xmlOutput + HTMLEncode(aResultSet.Fields(i).Name);
xmlOutput = xmlOutput + "</NAME>";
xmlOutput = xmlOutput + "</FIELD>";
}
xmlOutput = xmlOutput + "</FIELDS>";
xmlOutput = xmlOutput + "<ROWS>";
while (!aResultSet.EOF)
{
xmlOutput = xmlOutput + "<ROW>";
for(var i=0 ;i < aResultSet.Fields.Count ; i++)
{
xmlOutput = xmlOutput + "<VALUE>";
var aValue = aResultSet.Fields(i).Value;
if (aValue && aValue.length)
{
xmlOutput = xmlOutput + HTMLEncode(aValue);
}
else
{
xmlOutput = xmlOutput + aResultSet.Fields(i).Value;
}
xmlOutput = xmlOutput + "</VALUE>";
}
xmlOutput = xmlOutput + "</ROW>";
aResultSet.MoveNext()
}
xmlOutput = xmlOutput + "</ROWS>";
xmlOutput = xmlOutput + "</RESULTSET>";
aResultSet.Close();
}
return xmlOutput;
}
function ConnGetODBCDSNs()
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var dsnList=new Array();
var OdbcIniFile = null;
var odbcFileName = "";
var e = new Enumerator(fso.Drives);
var xmlOutput="";
for (; !e.atEnd(); e.moveNext())
{
var x = e.item();
//Skip Drive that not ready...
if (!fso.DriveExists(x) || !x.IsReady || (x.DriveType==1))
{
continue;
}
var driverLetter = x.DriveLetter;
var WinFolderName1 = driverLetter + ":\\" + "Winnt";
var WinFolderName2 = driverLetter + ":\\" + "Windows";
if (fso.FolderExists(WinFolderName1))
{
//Get the ODBC FileName.
odbcFileName = WinFolderName1 + "\\" + "ODBC.INI";
break;
}
else if (fso.FolderExists(WinFolderName2))
{
//Get the ODBC FileName.
odbcFileName = WinFolderName2 + "\\" + "ODBC.INI";
break;
}
}
if (odbcFileName.length > 0)
{
if (fso.FileExists(odbcFileName))
{
// Don't use the FSO's OpenTextFile method because it hangs Windows XP.
// Work around that Windows bug by using the equivalently functional Stream
// object.
OdbcIniFile = Server.CreateObject("ADODB.Stream");
OdbcIniFile.Type = 2;
// Initially, we will try to use the charset associated with the codepage
// for this ASP session. This should be the default charset for this
// web site or for this server. This helps in cases where the OS is in,
// say, Japanese. However, we have found (empiracally) that on some
// computers this causes the stream to be unreadable. So, we will
// (below) test the stream. If it looks bogus, we will default to using
// "ascii" as the charset.
OdbcIniFile.Charset = getCharsetStringFromCodepageNumber(currentSessionCodePage);
OdbcIniFile.Open();
OdbcIniFile.LoadFromFile(odbcFileName);
if (OdbcIniFile && (!OdbcIniFile.EOS))
{
// Test to see if we can, in fact, read the stream.
var aLine = OdbcIniFile.ReadText(-2);
// Reset the stream's position so if we can read it we haven't lost the test line
// that we just read.
OdbcIniFile.Position = 0;
if (aLine == "")
{
// It appears that the stream is bogus. Try reading it as ASCII.
OdbcIniFile.Close();
OdbcIniFile.Type = 2;
OdbcIniFile.Charset = "ascii";
OdbcIniFile.Open();
OdbcIniFile.LoadFromFile(odbcFileName);
}
}
}
}
if (OdbcIniFile)
{
var i =0;
var odbcSection = -1;
while (!OdbcIniFile.EOS)
{
var aLine = OdbcIniFile.ReadText(-2);
var odbcSection = aLine.indexOf("[ODBC");
if (odbcSection != -1)
{
break;
}
}
if (odbcSection != -1)
{
while (!OdbcIniFile.EOS)
{
var aLine = OdbcIniFile.ReadText(-2);
if (aLine.charAt(0) != "[")
{
var anIndex = aLine.indexOf("=");
if (anIndex != -1)
{
var dsnName = aLine.substring(0,anIndex);
dsnList[dsnList.length]= dsnName;
}
}
else
{
break;
}
}
}
OdbcIniFile.Close();
}
xmlOutput = "<RESULTSET>";
if (dsnList.length)
{
xmlOutput = xmlOutput + "<FIELDS>";
xmlOutput = xmlOutput + "<FIELD>";
xmlOutput = xmlOutput + "<NAME>NAME</NAME>";
xmlOutput = xmlOutput + "</FIELD>";
xmlOutput = xmlOutput + "</FIELDS>";
xmlOutput = xmlOutput + "<ROWS>";
for (var i =0 ; i < dsnList.length; i++)
{
xmlOutput = xmlOutput + "<ROW>";
xmlOutput = xmlOutput + "<VALUE>";
xmlOutput = xmlOutput + HTMLEncode(dsnList[i]);
xmlOutput = xmlOutput + "</VALUE>";
xmlOutput = xmlOutput + "</ROW>";
}
xmlOutput = xmlOutput + "</ROWS>";
}
xmlOutput = xmlOutput + "</RESULTSET>";
return xmlOutput;
}
function ConnEval(ConnString)
{
ConnString = "" + ConnString;
if (ConnString.length)
{
var delimiter = (ConnString.indexOf("+") != -1) ? "+" : "&";
var aConnString = "";
for (;;)
{
var index = ConnString.indexOf(delimiter);
if (index == -1)
{
index = ConnString.length;
}
var aStringlet = ConnString.substring(0,index);
try
{
aConnString = aConnString + eval(aStringlet);
}
catch (e)
{
aConnString = ConnString;
return aConnString;
}
if (index >= ConnString.length)
{
break;
}
ConnString = ConnString.substring(index+1,ConnString.length);
}
return aConnString;
}
return ConnString;
}
function HTMLEncode(TheString)
{
if ( Session.CodePage == 65001 )
{
return TheString;
}
else
{
return Server.HTMLEncode(TheString);
}
}
function getCharsetStringFromCodepageNumber(nCodePage)
{
var strCharSet = "ascii";
switch (nCodePage)
{
case 20106: strCharSet = "DIN_66003"; break;
case 20108: strCharSet = "NS_4551-1"; break;
case 20107: strCharSet = "SEN_850200_B"; break;
case 50932: strCharSet = "_autodetect"; break;
case 50949: strCharSet = "_autodetect_kr"; break;
case 950: strCharSet = "big5"; break;
case 50221: strCharSet = "csISO2022JP"; break;
case 51949: strCharSet = "euc-kr"; break;
case 936: strCharSet = "gb2312"; break;
case 52936: strCharSet = "hz-gb-2312"; break;
case 852: strCharSet = "ibm852"; break;
case 866: strCharSet = "ibm866"; break;
case 20105: strCharSet = "irv"; break;
case 50220: strCharSet = "iso-2022-jp"; break;
case 50222: strCharSet = "iso-2022-jp"; break;
case 50225: strCharSet = "iso-2022-kr"; break;
case 1252: strCharSet = "iso-8859-1"; break;
case 28591: strCharSet = "iso-8859-1"; break;
case 28592: strCharSet = "iso-8859-2"; break;
case 28593: strCharSet = "iso-8859-3"; break;
case 28594: strCharSet = "iso-8859-4"; break;
case 28595: strCharSet = "iso-8859-5"; break;
case 28596: strCharSet = "iso-8859-6"; break;
case 28597: strCharSet = "iso-8859-7"; break;
case 28598: strCharSet = "iso-8859-8"; break;
case 20866: strCharSet = "koi8-r"; break;
case 949: strCharSet = "ks_c_5601"; break;
case 932: strCharSet = "shift-jis"; break;
case 1200: strCharSet = "unicode"; break;
case 1201: strCharSet = "unicodeFEFF"; break;
case 65000: strCharSet = "utf-7"; break;
case 65001: strCharSet = "utf-8"; break;
case 1250: strCharSet = "windows-1250"; break;
case 1251: strCharSet = "windows-1251"; break;
case 1252: strCharSet = "windows-1252"; break;
case 1253: strCharSet = "windows-1253"; break;
case 1254: strCharSet = "windows-1254"; break;
case 1255: strCharSet = "windows-1255"; break;
case 1256: strCharSet = "windows-1256"; break;
case 1257: strCharSet = "windows-1257"; break;
case 1258: strCharSet = "windows-1258"; break;
case 874: strCharSet = "windows-874"; break;
case 51932: strCharSet = "x-euc"; break;
case 50000: strCharSet = "x-user-defined"; break;
}
return strCharSet;
}
</SCRIPT>
<SCRIPT LANGUAGE=JavaScript RUNAT=Server>
//---- ObjectStateEnum Values ----
var adStateClosed = 0x00000000;
var adStateOpen = 0x00000001;
var adStateConnecting = 0x00000002;
var adStateExecuting = 0x00000004;
var adStateFetching = 0x00000008;
//---- DataTypeEnum Values ----
var adEmpty = 0;
var adTinyInt = 16;
var adSmallInt = 2;
var adInteger = 3;
var adBigInt = 20;
var adUnsignedTinyInt = 17;
var adUnsignedSmallInt = 18;
var adUnsignedInt = 19;
var adUnsignedBigInt = 21;
var adSingle = 4;
var adDouble = 5;
var adCurrency = 6;
var adDecimal = 14;
var adNumeric = 131;
var adBoolean = 11;
var adError = 10;
var adUserDefined = 132;
var adVariant = 12;
var adIDispatch = 9;
var adIUnknown = 13;
var adGUID = 72;
var adDate = 7;
var adDBDate = 133;
var adDBTime = 134;
var adDBTimeStamp = 135;
var adBSTR = 8;
var adChar = 129;
var adVarChar = 200;
var adLongVarChar = 201;
var adWChar = 130;
var adVarWChar = 202;
var adLongVarWChar = 203;
var adBinary = 128;
var adVarBinary = 204;
var adLongVarBinary = 205;
var adChapter = 136;
var adFileTime = 64;
var adDBFileTime = 137;
var adPropVariant = 138;
var adVarNumeric = 139;
//---- PositionEnum Values ----
var adPosUnknown = -1;
var adPosBOF = -2;
var adPosEOF = -3;
//---- ParameterDirectionEnum Values ----
var adParamUnknown = 0x0000;
var adParamInput = 0x0001;
var adParamOutput = 0x0002;
var adParamInputOutput = 0x0003;
var adParamReturnValue = 0x0004;
//---- CommandTypeEnum Values ----
var adCmdUnknown = 0x0008;
var adCmdText = 0x0001;
var adCmdTable = 0x0002;
var adCmdStoredProc = 0x0004;
var adCmdFile = 0x0100;
var adCmdTableDirect = 0x0200;
//---- SchemaEnum Values ----
var adSchemaProviderSpecific = -1;
var adSchemaAsserts = 0;
var adSchemaCatalogs = 1;
var adSchemaCharacterSets = 2;
var adSchemaCollations = 3;
var adSchemaColumns = 4;
var adSchemaCheckConstraints = 5;
var adSchemaConstraintColumnUsage = 6;
var adSchemaConstraintTableUsage = 7;
var adSchemaKeyColumnUsage = 8;
var adSchemaReferentialConstraints = 9;
var adSchemaTableConstraints = 10;
var adSchemaColumnsDomainUsage = 11;
var adSchemaIndexes = 12;
var adSchemaColumnPrivileges = 13;
var adSchemaTablePrivileges = 14;
var adSchemaUsagePrivileges = 15;
var adSchemaProcedures = 16;
var adSchemaSchemata = 17;
var adSchemaSQLLanguages = 18;
var adSchemaStatistics = 19;
var adSchemaTables = 20;
var adSchemaTranslations = 21;
var adSchemaProviderTypes = 22;
var adSchemaViews = 23;
var adSchemaViewColumnUsage = 24;
var adSchemaViewTableUsage = 25;
var adSchemaProcedureParameters = 26;
var adSchemaForeignKeys = 27;
var adSchemaPrimaryKeys = 28;
var adSchemaProcedureColumns = 29;
var adSchemaDBInfoKeywords = 30;
var adSchemaDBInfoLiterals = 31;
var adSchemaCubes = 32;
var adSchemaDimensions = 33;
var adSchemaHierarchies = 34;
var adSchemaLevels = 35;
var adSchemaMeasures = 36;
var adSchemaProperties = 37;
var adSchemaMembers = 38;
</SCRIPT>