套用 XSL 轉換 (SQLXMLOLEDB 提供者)
在此範例 ADO 應用程式中,會執行 SQL 查詢,而且會將 XSL 轉換套用到結果中。將 ClientSideXML 屬性設定為 True 會強制處理用戶端上的資料列集。命令用語設定為 {5d531cb2-e6ed-11d2-b252-00c04f681b71},因為 SQL 查詢是在範本中指定,而且此用語必須在執行範本時指定。xsl 屬性會指定要使用的 XSL 檔來套用轉換。Base Path 屬性的值用於搜尋 XSL 檔。如果您在 xsl 屬性值中指定路徑,該路徑會相對於在 Base 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 2008 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=SQLNCLI10;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>