コマンド ストリーム
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