Применение преобразования 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 на сервере выполняется XML-шаблон, содержащий SQL-запрос.
Поскольку свойство ClientSideXML имеет значение True, на сервер отправляется инструкция SELECT без предложения FOR XML. Сервер выполняет запрос и возвращает клиенту набор строк. Затем клиент применяет к набору строк преобразование FOR XML и создает XML-документ.
Свойство xsl задано в приложении, следовательно, преобразование XSL применяется к XML-документу, сформированному на стороне клиента, а результатом является таблица из двух столбцов.
Для выполнения этой команды шаблона необходимо указать диалект XML-шаблона {5d531cb2-e6ed-11d2-b252-00c04f681b71}.
Примечание |
|---|
В коде необходимо задать имя экземпляра Microsoft SQL Server в строке соединения. Кроме того, в данном примере указано использование собственного клиента SQL Server в качестве поставщика данных, для чего требуется установка дополнительного клиентского сетевого ПО. Дополнительные сведения см. в разделе Требования к системе для собственного клиента SQL Server R2. |
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=AdventureWorks2008R2;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.Person 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-шаблон. Результатом его применения является таблица из двух столбцов.
<?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.Person'>
<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>
Примечание