Bagikan melalui


Menerapkan Transformasi XSL (Penyedia SQLXMLOLEDB)

Dalam contoh aplikasi ADO ini, kueri SQL dijalankan, dan transformasi XSL diterapkan ke hasilnya. Mengatur properti ClientSideXML ke True memberlakukan pemrosesan set baris di sisi klien. Dialek perintah diatur ke {5d531cb2-e6ed-11d2-b252-00c04f681b71}, karena kueri SQL ditentukan dalam templat dan dialek ini harus ditentukan saat menjalankan templat. Properti xsl menentukan file XSL yang akan digunakan untuk menerapkan transformasi. Nilai properti Jalur Dasar digunakan untuk mencari file XSL. Jika Anda menentukan jalur dalam nilai properti xsl, jalur relatif terhadap jalur yang ditentukan dalam properti Jalur Dasar.

Contoh ini menunjukkan cara menggunakan properti khusus Penyedia SQLXMLOLEDB berikut:

  • ClientSideXML

  • xsl

Dalam aplikasi sampel ADO sisi klien ini, templat XML yang terdiri dari kueri SQL dijalankan di server.

Karena properti ClientSideXML diatur ke True, pernyataan SELECT tanpa klausa FOR XML dikirim ke server. Server menjalankan kueri dan mengembalikan set baris ke klien. Klien kemudian menerapkan transformasi FOR XML ke set baris dan menghasilkan dokumen XML.

Properti xsl ditentukan dalam aplikasi; oleh karena itu, transformasi XSL diterapkan ke dokumen XML yang dihasilkan pada klien, dan hasilnya adalah tabel dua kolom.

Untuk menjalankan perintah templat, dialek templat XML - {5d531cb2-e6ed-11d2-b252-00c04f681b71} - harus ditentukan.

Nota

Dalam kode, Anda harus memberikan nama instans Microsoft SQL Server dalam string koneksi. Selain itu, contoh ini menentukan penggunaan SQL Server Native Client untuk penyedia data yang memerlukan perangkat lunak klien jaringan tambahan untuk diinstal. Untuk informasi selengkapnya, lihat Persyaratan Sistem untuk 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 25 FirstName, LastName FROM Person.Contact FOR XML AUTO " & _  
        "   </sql: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\ExecuteTemplateWithXSL\"  
oTestCommand.Properties("xsl").Value = "myxsl.xsl"  
oTestCommand.Execute , , adExecuteStream  
  
oTestStream.Position = 0  
oTestStream.Charset = "utf-8"  
Debug.Print oTestStream.ReadText(adReadAll)  
End Sub  
Sub Form_Load()  
 main  
End Sub  

Templat XSL mengikuti. Hasil penerapan templat XSL ini adalah tabel dua kolom.

<?xml version='1.0' encoding='UTF-8'?>            
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">   
  
    <xsl:template match = 'Person.Contact'>  
       <TR>  
         <TD><xsl:value-of select = '@FirstName' /></TD>  
         <TD><B><xsl:value-of select = '@LastName' /></B></TD>  
       </TR>  
    </xsl:template>  
    <xsl:template match = '/'>  
      <HTML>  
        <HEAD>  
           <STYLE>th { background-color: #CCCCCC }</STYLE>  
        </HEAD>  
        <BODY>  
         <TABLE border='1' style='width:300;'>  
           <TR><TH colspan='2'>Contacts</TH></TR>  
           <TR>  
              <TH >First name</TH>  
              <TH>Last name</TH>  
           </TR>  
           <xsl:apply-templates select = 'ROOT' />  
         </TABLE>  
        </BODY>  
      </HTML>  
    </xsl:template>  
</xsl:stylesheet>