XSL 変換の適用 (SQLXMLOLEDB プロバイダ)
このサンプル ADO アプリケーションでは、SQL クエリが実行され、結果に XSL 変換が適用されます。ClientSideXML プロパティを True に設定すると、クライアント側で行セットの処理が実行されます。SQL クエリをテンプレートで指定する場合は、テンプレート実行時にコマンド言語を指定する必要があるため、コマンド言語 {5d531cb2-e6ed-11d2-b252-00c04f681b71} を設定します。変換の適用に使用する XSL ファイルは、xsl プロパティで指定します。XSL ファイルの検索には、Base Path プロパティの値が使用されます。xsl プロパティの値にパスを指定する場合、パスは Base Path プロパティで指定されるパスの相対パスになります。
この例では、次の SQLXMLOLEDB プロバイダ固有のプロパティについて、使用法を示します。
- ClientSideXML
- xsl
このクライアント側の ADO サンプル アプリケーションでは、SQL クエリで構成される XML テンプレートがサーバーで実行されます。
ここでは ClientSideXML プロパティが True に設定されているので、FOR XML 句を指定せずに SELECT ステートメントをサーバーに送信します。サーバーではクエリが実行され、クライアントに行セットが返されます。次にクライアントではその行セットに FOR XML 変換が適用され、XML ドキュメントが作成されます。
アプリケーションでは xsl プロパティが指定されているため、クライアント側で生成される XML ドキュメントに XSL 変換が適用され、結果は 2 列のテーブルになります。
テンプレート コマンドを実行するには、XML テンプレート言語 {5d531cb2-e6ed-11d2-b252-00c04f681b71} を指定する必要があります。
![]() |
---|
コードでは、接続文字列に Microsoft SQL Server インスタンス名を含める必要があります。また、この例ではデータ プロバイダとして SQL Native Client (SQLNCLI) を使用するよう指定していますが、これには追加ネットワーク クライアントがインストールされていることが必要です。詳細については、「SQL 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=SQLNCLI;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 テンプレートを適用すると、2 列のテーブルが生成されます。
<?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>