命令流

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

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

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

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  

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

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

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

Set objRS = adoCmd.Execute