このサンプル ADO アプリケーションでは、SQL クエリが実行され、XSL 変換が結果に適用されます。 ClientSideXML プロパティを True に設定すると、クライアント側で行セットの処理が強制されます。 SQL クエリはテンプレートで指定されており、テンプレートの実行時にこの方言を指定する必要があるため、コマンド 言語は {5d531cb2-e6ed-11d2-b252-00c04f681b71} に設定されます。 xsl プロパティは、変換の適用に使用する XSL ファイルを指定します。 基本パス プロパティの値は、XSL ファイルを検索するために使用されます。 xsl プロパティの値にパスを指定した場合、パスは Base Path プロパティで指定されたパスに対する相対パスになります。
この例では、次の SQLXMLOLEDB プロバイダー固有のプロパティを使用する方法を示します。
ClientSideXML
xsl
このクライアント側の ADO サンプル アプリケーションでは、SQL クエリで構成される XML テンプレートがサーバー上で実行されます。
ClientSideXML プロパティが True に設定されているため、FOR XML 句のない SELECT ステートメントがサーバーに送信されます。 サーバーはクエリを実行し、クライアントに行セットを返します。 その後、クライアントは FOR XML 変換を行セットに適用し、XML ドキュメントを生成します。
xsl プロパティは、アプリケーションで指定されます。したがって、XSL 変換はクライアントで生成される XML ドキュメントに適用され、結果は 2 列のテーブルになります。
テンプレート コマンドを実行するには、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 テンプレートを適用した結果は、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>