Freigeben über


Ausführen von Vorlagen, die SQL-Abfragen enthalten (SQLXMLOLEDB-Anbieter)

In diesem Beispiel wird die Verwendung der anbieterspezifischen SQLXMLOLEDB-Eigenschaft "ClientSideXML" veranschaulicht. In dieser clientseitigen ADO-Beispielanwendung wird eine XML-Vorlage, die aus einer SQL-Abfrage besteht, auf dem Server ausgeführt.

Da die ClientSideXML-Eigenschaft auf "True" festgelegt ist, wird die SELECT-Anweisung ohne die FOR XML-Klausel an den Server gesendet. Der Server führt die Abfrage aus und gibt ein Rowset an den Client zurück. Der Client wendet dann die FOR XML-Transformation auf das Rowset an und erzeugt ein XML-Dokument.

Die XML-Vorlage stellt ein einzelnes Stammelement der obersten Ebene (<ROOT>) für das generierte XML-Dokument bereit. Daher wird die XML-Stammeigenschaft nicht bereitgestellt.

Zum Ausführen von XML-Vorlagen muss der Dialekt "{5d531cb2-e6ed-11d2-b252-00c04f681b71}" angegeben werden.

Hinweis

Im Code müssen Sie den Namen der Instanz von SQL Server in der Verbindungszeichenfolge angeben. Außerdem gibt dieses Beispiel die Verwendung des SQL Server Native Client (SQLNCLI11) für den Datenanbieter an, der zusätzliche Netzwerkclientsoftware installiert werden muss. Weitere Informationen finden Sie unter Systemanforderungen für SQL Server Native Client.

Option Explicit  
  
Sub Main()  
  Dim oTestStream As New ADODB.Stream  
  Dim oTestConnection As New ADODB.Connection  
  Dim oTestCommand As New ADODB.Command  
  oTestConnection.Open "Provider=SQLXMLOLEDB.4.0;Data Provider=SQLNCLI11;Data Source=SqlServerName;Initial Catalog=AdventureWorks;Integrated Security=SSPI;"  
  
  Set oTestCommand.ActiveConnection = oTestConnection  
  oTestCommand.Properties("ClientSideXML") = True  
  oTestCommand.CommandText = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'> " & _  
        " <sql:query> " & _  
        "   SELECT TOP 10 FirstName, LastName FROM Person.Contact FOR XML AUTO " & _  
        "   </sql:query> " & _  
        " </ROOT> "  
  oTestStream.Open  
  ' You need the dialect if you are executing   
  ' XML templates (not for SQL queries).  
  oTestCommand.Dialect = "{5d531cb2-e6ed-11d2-b252-00c04f681b71}"  
  oTestCommand.Properties("Output Stream").Value = oTestStream  
  oTestCommand.Execute , , adExecuteStream  
  
  oTestStream.Position = 0  
  oTestStream.Charset = "utf-8"  
  Debug.Print oTestStream.ReadText(adReadAll)  
End Sub  
  
Sub Form_Load()  
  Main  
End Sub