Partager via


Application d'une transformation XSL (fournisseur SQLXMLOLEDB)

Dans cet exemple d’application ADO, une requête SQL est exécutée et une transformation XSL est appliquée au résultat. La définition de la propriété ClientSideXML sur True applique le traitement de l’ensemble de lignes côté client. Le dialecte de commande est défini sur {5d531cb2-e6ed-11d2-b252-00c04f681b71}, car la requête SQL est spécifiée dans un modèle et ce dialecte doit être spécifié lors de l’exécution d’un modèle. La propriété xsl spécifie le fichier XSL à utiliser pour appliquer la transformation. La valeur de la propriété Chemin d’accès de base est utilisée pour rechercher le fichier XSL. Si vous spécifiez un chemin dans la valeur de la propriété xsl, le chemin d’accès est relatif au chemin spécifié dans la propriété Chemin d’accès de base.

Cet exemple montre comment utiliser les propriétés spécifiques au fournisseur SQLXMLOLEDB suivantes :

  • ClientSideXML

  • xsl

Dans cet exemple d’application ADO côté client, un modèle XML qui se compose d’une requête SQL est exécuté sur le serveur.

Étant donné que la propriété ClientSideXML a la valeur True, l’instruction SELECT sans la clause FOR XML est envoyée au serveur. Le serveur exécute la requête et retourne un ensemble de lignes au client. Le client applique ensuite la transformation FOR XML à l’ensemble de lignes et produit le document XML.

La propriété xsl est spécifiée dans l’application ; Par conséquent, la transformation XSL est appliquée au document XML généré sur le client et le résultat est une table à deux colonnes.

Pour exécuter la commande de modèle, le dialecte du modèle XML - {5d531cb2-e6ed-11d2-b252-00c04f681b71} - doit être spécifié.

Remarque

Dans le code, vous devez fournir le nom de l’instance de Microsoft SQL Server dans la chaîne de connexion. En outre, cet exemple spécifie l’utilisation de SQL Server Native Client pour le fournisseur de données qui nécessite l’installation d’un logiciel client réseau supplémentaire. Pour plus d’informations, consultez Configuration système requise pour 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  

Le modèle XSL suit. Le résultat de l’application de ce modèle XSL est une table à deux colonnes.

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