Потоки команд

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