次の方法で共有


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} を指定する必要があります。

ms172638.note(ja-jp,SQL.90).gifメモ :
コードでは、接続文字列に 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>