命令流

ADO 始终支持 CommandText 属性指定的字符串格式的命令输入。 作为替代方法,使用 ADO 2.7 或更高版本时,还可以通过将信息流分配给 CommandStream 属性来将该流用于命令输入。 可以分配 ADO Stream 对象或支持 COM IStream 接口的任何对象。

命令流的内容只是简单地从 ADO 传递到提供程序,因此提供程序必须通过流支持命令输入才能使此功能正常运行。 例如,SQL Server 支持采用 XML 模板或 Transact-SQL 的 OpenXML 扩展形式的查询。

由于提供程序必须解释流的详细信息,因此你必须通过设置 Dialect 属性来指定命令方言。 Dialect 的值是包含由提供程序定义的 GUID 的字符串。 有关提供程序支持的 Dialect 的有效值的信息,请参阅提供程序文档。

XML 模板查询示例

以下示例以 VBScript 写入 Northwind 数据库。

首先,初始化并打开将用于包含查询流的 Stream 对象:

Dim adoStreamQuery  
Set adoStreamQuery = Server.CreateObject("ADODB.Stream")  
adoStreamQuery.Open  

查询流的内容将是 XML 模板查询。

模板查询需要引用 XML 命名空间,该命名空间由 <sql:query> 标记的 sql: 前缀标识。 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 分配给 ADO Command 对象的 CommandStream 属性:

Dim adoCmd  
Set adoCmd  = Server.CreateObject("ADODB.Command"")  
adoCmd.CommandStream = adoStreamQuery  

指定命令语言 Dialect,它指示 SQL Server OLE DB 提供程序应如何解释命令流。 特定于提供程序的 GUID 指定的方言:

adoCmd.Dialect = "{5D531CB2-E6Ed-11D2-B252-00C04F681B71}"  

最后,执行查询并将结果返回到 Recordset 对象:

Set objRS = adoCmd.Execute