Поделиться через


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

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