Freigeben über


Command-Datenströme

ADO unterstützt seit jeher die Eingabe von Befehlen im Zeichenfolgenformat, das durch die Eigenschaft CommandText angegeben wird. Alternativ können Sie mit ADO 2.7 oder höher auch einen Informationsstrom für die Befehlseingabe verwenden, indem Sie den Stream der Eigenschaft CommandStream zuweisen. Sie können entweder ein ADO Stream-Objekt oder ein beliebiges Objekt zuweisen, das die COM IStream-Schnittstelle unterstützt.

Der Inhalt des Befehlsstreams wird einfach von ADO an Ihren Anbieter weitergegeben. Ihr Anbieter muss also die Befehlseingabe per Stream unterstützen, damit diese Funktion funktioniert. So unterstützt SQL Server beispielsweise Abfragen in Form von XML-Vorlagen oder OpenXML-Erweiterungen zu Transact-SQL.

Da die Details des Streams vom Anbieter interpretiert werden müssen, müssen Sie den Befehlsdialekt angeben, indem Sie die Eigenschaft Dialect festlegen. Der Wert von Dialekt ist eine Zeichenfolge, die eine GUID enthält, die von Ihrem Anbieter definiert wird. Informationen über gültige Werte für Dialekt, die von Ihrem Anbieter unterstützt werden, finden Sie in der Dokumentation Ihres Anbieters.

Beispiel für XML-Vorlagenabfrage

Das folgende Beispiel ist in VBScript für die Northwind-Datenbank geschrieben.

Initialisieren und öffnen Sie zunächst das Stream-Objekt, das den Abfrage-Stream enthalten soll:

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

Der Inhalt des Abfrage-Streams wird eine XML-Vorlagenabfrage sein.

Die Vorlagenabfrage erfordert einen Verweis auf den XML-Namespace, der durch das Präfix sql: des <sql:query>-Tags identifiziert wird. Eine SQL SELECT-Anweisung wird als Inhalt der XML-Vorlage aufgenommen und wie folgt einer Zeichenfolgenvariablen zugewiesen:

sQuery = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>  
<sql:query> SELECT * FROM PRODUCTS ORDER BY PRODUCTNAME </sql:query>  
</ROOT>"  

Als nächstes schreiben Sie die Zeichenfolge in den Stream:

adoStreamQuery.WriteText sQuery, adWriteChar  
adoStreamQuery.Position = 0  

Weisen Sie adtreamQuery der Eigenschaft CommandStream eines ADO Command-Objekts zu:

Dim adoCmd  
Set adoCmd  = Server.CreateObject("ADODB.Command"")  
adoCmd.CommandStream = adoStreamQuery  

Bestimmen Sie den Dialect der Befehlssprache, der angibt, wie der SQL Server OLE DB Provider den Befehlsstream interpretieren soll. Der Dialekt, der durch eine anbieterspezifische GUID angegeben wird:

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

Abschließend führen Sie die Abfrage aus und geben die Ergebnisse an ein Recordset-Objekt zurück:

Set objRS = adoCmd.Execute