Поделиться через


Выполнение шаблонов, содержащих SQL-запросы (поставщик SQLXMLOLEDB)

В этом примере показано использование свойства ClientSideXML ДЛЯ поставщика SQLXML. В этом примере клиентского приложения ADO на сервере выполняется XML-шаблон, состоящий из SQL-запроса.

Так как свойство ClientSideXML имеет значение True, инструкция SELECT без предложения FOR XML отправляется на сервер. Сервер выполняет запрос и возвращает набор строк клиенту. Затем клиент применяет преобразование FOR XML к набору строк и создает XML-документ.

Шаблон XML предоставляет один корневой элемент верхнего уровня (<ROOT>) для создаваемого XML-документа, поэтому корневое свойство XML не предоставляется.

Чтобы выполнить шаблоны XML, необходимо указать диалект {5d531cb2-e6ed-11d2-b252-00c04f681b71} .

Замечание

В коде необходимо указать имя экземпляра SQL Server в строке подключения. Кроме того, в этом примере указывается использование собственного клиента SQL Server (SQLNCLI11) для поставщика данных, для которого требуется установить дополнительное сетевое клиентское программное обеспечение. Дополнительные сведения см. в разделе "Требования к системе" для собственного клиента SQL Server.

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