Compartilhar via


Aplicando uma Transformação XSL (Provedor SQLXMLOLEDB)

Neste aplicativo ADO de exemplo, uma consulta SQL é executada e uma transformação XSL é aplicada ao resultado. Definir a propriedade ClientSideXML como True impõe o processamento do conjunto de linhas no lado do cliente. O dialeto de comando é definido como {5d531cb2-e6ed-11d2-b252-00c04f681b71}, pois a consulta SQL é especificada em um modelo e esse dialeto deve ser especificado ao executar um modelo. A propriedade xsl especifica o arquivo XSL a ser usado para aplicar a transformação. O valor da propriedade Caminho base é usado para pesquisar o arquivo XSL. Se você especificar um caminho no valor da propriedade xsl, o caminho será relativo ao caminho especificado na propriedade Caminho Base.

Este exemplo mostra como usar as seguintes propriedades específicas do provedor SQLXMLOLEDB:

  • ClientSideXML

  • xsl

Neste aplicativo de exemplo do ADO do lado do cliente, um modelo XML que consiste em uma consulta SQL é executado no servidor.

Como a propriedade ClientSideXML está definida como True, a instrução SELECT sem a cláusula FOR XML é enviada ao servidor. O servidor executa a consulta e retorna um conjunto de linhas para o cliente. Em seguida, o cliente aplica a transformação FOR XML ao conjunto de linhas e produz o documento XML.

A propriedade xsl é especificada no aplicativo; portanto, a transformação XSL é aplicada ao documento XML que é gerado no cliente e o resultado é uma tabela de duas colunas.

Para executar o comando de modelo, o dialeto do modelo XML - {5d531cb2-e6ed-11d2-b252-00c04f681b71} - deve ser especificado.

Observação

No código, você deve fornecer o nome da instância do Microsoft SQL Server na cadeia de conexão. Além disso, este exemplo especifica o uso do SQL Server Native Client para o provedor de dados que exige a instalação de software cliente de rede adicional. Para obter mais informações, consulte Os Requisitos do Sistema para o 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  

O modelo XSL segue. O resultado da aplicação desse modelo XSL é uma tabela de duas colunas.

<?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>