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


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

В этом примере показано, как использовать следующие свойства поставщика SQLXMLOLEDB:

  • ClientSideXML

  • Базовый путь

  • Схема сопоставления

В этом примере приложения ADO шаблон XML, состоящий из запроса XPath (root), указывается в схеме сопоставления XSD (MySchema.xml), описанной в разделе "Выполнение запросов XPath" (поставщик SQLXMLOLEDB).

Свойство схемы сопоставления предоставляет схему сопоставления XSD, с которой выполняется запрос XPath. Свойство Base Path предоставляет путь к схеме сопоставления.

Свойство ClientSideXML имеет значение True. Поэтому XML-документ создается на клиенте.

В приложении запрос XPath указывается напрямую. Поэтому диалект {5d531cb2-e6ed-11d2-b252-00c04f681b71} должен быть включен.

Замечание

В коде необходимо указать имя экземпляра Microsoft 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;"  
  
   oTestCommand.ActiveConnection = oTestConnection  
   oTestCommand.Properties("ClientSideXML") = "False"  
  
   oTestCommand.CommandText = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'> " & _  
        " <sql:xpath-query mapping-schema='mySchema.xml' > " & _  
        "   root " & _  
        "   </sql:xpath-query> " & _  
        " </ROOT> "  
   oTestStream.Open  
   ' You need the dialect if you are executing a template.  
   oTestCommand.Dialect = "{5d531cb2-e6ed-11d2-b252-00c04f681b71}"  
   oTestCommand.Properties("Output Stream").Value = oTestStream  
   oTestCommand.Properties("Base Path").Value = "c:\Schemas\SQLXML4\TemplateWithXPath\"  
   oTestCommand.Properties("Mapping Schema").Value = "mySchema.xml"  
   oTestCommand.Properties("Output Encoding") = "utf-8"  
   oTestCommand.Execute , , adExecuteStream  
   oTestStream.Position = 0  
   oTestStream.Charset = "utf-8"  
   Debug.Print oTestStream.ReadText(adReadAll)  
  
End Sub  
  
Sub Form_Load()  
   Main  
End Sub  

Это схема:

<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'  
   xmlns:sql='urn:schemas-microsoft-com:mapping-schema'>  
 <xsd:element name= 'root' sql:is-constant='1'>   
    <xsd:complexType>  
       <xsd:sequence>  
         <xsd:element ref = 'Contact'/>  
       </xsd:sequence>  
    </xsd:complexType>  
  </xsd:element>  
  
  <xsd:element name='Contact' sql:relation='Person.Contact'>  
     <xsd:complexType>  
          <xsd:attribute name='ContactID' type='xsd:integer' />  
          <xsd:attribute name='FirstName' type='xsd:string'/>   
          <xsd:attribute name='LastName' type='xsd:string' />   
     </xsd:complexType>  
   </xsd:element>  
</xsd:schema>