命令資料流

ADO 一直都支援 CommandText 屬性所指定的字串格式命令輸入。 或者,您也可以使用 ADO 2.7 或更新版本,將資料流指派給 CommandStream 屬性,以使用資訊流進行命令輸入。 您可以指派 ADO Stream 物件,或任何支援 COM IStream 介面的物件。

命令資料流的內容將從 ADO 傳遞至您的提供者,因此您的提供者必須支援以資料流進行命令輸入,此功能才能運作。 例如,SQL Server 支援以 XML 範本或 OpenXML 延伸模組形式向 Transact-SQL 進行的查詢。

資料流的詳情必須由提供者解譯,因此您必須設定 Dialect 屬性以指定命令方言。 Dialect 的值為字串,且包含由提供者定義的 GUID。 如需提供者所支援 Dialect 的有效值相關資訊,請參閱提供者文件。

XML 範本查詢範例

下列範例會以 VBScript 寫入 Northwind 資料庫。

首先,初始化並開啟將用來包含查詢資料流的 Stream 物件:

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

查詢資料流的內容會是 XML 範本查詢。

範本查詢需使用由 <sql:query> 標籤的 sql:prefix 所識別之 XML 命名空間的參考。 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