Потоки команд
ADO всегда поддерживал входные данные команд в строковом формате, заданном свойством CommandText . В качестве альтернативы в ADO 2.7 или более поздней версии можно также использовать поток информации для ввода команд, назначив поток свойству CommandStream . Можно назначить объект ADO Stream или любой объект, поддерживающий интерфейс COM IStream .
Содержимое потока команд просто передается из ADO поставщику, поэтому поставщик должен поддерживать ввод команд по потоку, чтобы эта функция работала. Например, SQL Server поддерживает запросы в виде XML-шаблонов или расширений OpenXML для Transact-SQL.
Так как сведения о потоке должны быть интерпретированы поставщиком, необходимо указать диалект команды, задав свойство Диалект . Значение диалекта — это строка, содержащая GUID, который определяется поставщиком. Сведения о допустимых значениях для диалекта , поддерживаемых поставщиком, см. в документации по поставщику.
Пример запроса шаблона XML
Следующий пример записывается на VBScript в базу данных Northwind.
Сначала инициализируйте и откройте объект Stream , который будет использоваться для хранения потока запроса:
Dim adoStreamQuery
Set adoStreamQuery = Server.CreateObject("ADODB.Stream")
adoStreamQuery.Open
Содержимое потока запроса будет xml-шаблонным запросом.
Для запроса шаблона требуется ссылка на пространство имен XML, определяемое префиксом sql: тега <sql:query> . Инструкция SQL SELECT включается в качестве содержимого xml-шаблона и назначается строковой переменной следующим образом:
sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<sql:query> SELECT * FROM PRODUCTS ORDER BY PRODUCTNAME </sql:query>
</ROOT>"
Затем запишите строку в поток:
adoStreamQuery.WriteText sQuery, adWriteChar
adoStreamQuery.Position = 0
Назначьте adoStreamQuery свойству CommandStream объекта ADO Command :
Dim adoCmd
Set adoCmd = Server.CreateObject("ADODB.Command"")
adoCmd.CommandStream = adoStreamQuery
Укажите диалект языка команд, который указывает, как поставщик OLE DB SQL Server должен интерпретировать поток команд. Диалект, заданный идентификатором GUID для конкретного поставщика:
adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"
Наконец, выполните запрос и верните результаты в объект Recordset :
Set objRS = adoCmd.Execute