コマンド ストリーム

ADO では、CommandText プロパティで指定された文字列形式のコマンド入力を常にサポートしています。 別の方法として、ADO 2.7 以降では、CommandStream プロパティにストリームを割り当てることで、コマンド入力に情報のストリームを使用することもできます。 ADO Stream オブジェクト、または COM IStream インターフェイスをサポートする任意のオブジェクトを割り当てることができます。

コマンド ストリームのコンテンツは ADO からプロバイダーに渡されるだけなので、この機能を機能させるには、プロバイダーがストリームによるコマンド入力をサポートする必要があります。 たとえば、SQL Server では、XML テンプレートまたは Transact-SQL への OpenXML 拡張機能の形式のクエリがサポートされます。

ストリームの詳細はプロバイダーによって解釈される必要があるため、Dialect プロパティ設定してコマンド言語を指定する必要があります。 Dialect の値は、プロバイダーによって定義される GUID を含む文字列です。 プロバイダーでサポートされている Dialect の有効な値については、プロバイダーのドキュメントを参照してください。

XML テンプレート クエリの例

次の例は、Northwind データベースに VBScript で記述されています。

まず、クエリ ストリームを格納するために使用される Stream オブジェクトを初期化して開きます。

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

クエリ ストリームのコンテンツは XML テンプレート クエリになります。

テンプレート クエリには、<sql:query> タグの sql: プレフィックスによって識別される 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  

ADO Command オブジェクトの CommandStream プロパティに adoStreamQuery を割り当てます。

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