Потоки команд
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: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