共用方式為


使用 SQLXMLOLEDB 提供者進行 XSL 轉換

在此範例 ADO 應用程式中,會執行 SQL 查詢,並將 XSL 轉換套用至結果。 將 ClientSideXML 屬性設定為 True 會強制處理用戶端上的數據列集。 命令方言會設定為 {5d531cb2-e6ed-11d2-b252-00c04f681b71},因為 SQL 查詢是在範本中指定,而且在執行範本時必須指定此方言。 xsl 屬性會指定要用來套用轉換的 XSL 檔案。 基底路徑屬性的值是用來搜尋 XSL 檔案。 如果您在 xsl 屬性的值中指定路徑,則路徑會相對於基底 Path 屬性中指定的路徑。

此範例示範如何使用下列 SQLXMLOLEDB 提供者特定屬性:

  • ClientSideXML

  • xsl

在此用戶端 ADO 範例應用程式中,會在伺服器上執行包含 SQL 查詢的 XML 範本。

由於 ClientSideXML 屬性設定為 True,因此沒有 FOR XML 子句的 SELECT 語句會傳送至伺服器。 伺服器會執行查詢,並將數據列集傳回給用戶端。 然後,用戶端會將 FOR XML 轉換套用至數據列集,併產生 XML 檔。

xsl 屬性是在應用程式中指定;因此,XSL 轉換會套用至用戶端上產生的 XML 檔,而結果是雙欄數據表。

若要執行範本命令,必須指定 XML 範本方言 - {5d531cb2-e6ed-11d2-b252-00c04f681b71} - 。

備註

在程式代碼中,您必須在連接字串中提供 Microsoft SQL Server 實例的名稱。 此外,此範例會指定數據提供者使用 SQL Server Native Client,而數據提供者需要安裝額外的網路用戶端軟體。 如需詳細資訊,請參閱 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  

XSL 範本如下。 套用這個 XSL 範本的結果是兩個數據行數據表。

<?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>