命令流
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