Partager via


Mise en forme XML côté client (SQLXML 4.0)

Cette rubrique fournit des informations sur la mise en forme XML côté client. La mise en forme côté client fait référence à la mise en forme de XML sur le niveau intermédiaire.

Remarque

Cette rubrique fournit des informations supplémentaires sur l’utilisation de la clause FOR XML côté client et part du principe que vous connaissez déjà la clause FOR XML. Pour plus d’informations sur FOR XML, consultez Construction de XML à l’aide de FOR XML.

Important Pour utiliser la fonctionnalité FOR XML côté client avec le nouveau xml type de données, les clients doivent toujours utiliser le fournisseur de données SQL Server Native Client (SQLNCLI11) au lieu du fournisseur SQLOLEDB. SQLNCLI11 est la dernière version du fournisseur SQL Server et comprend pleinement les types de données introduits dans SQL Server 2005. Le comportement de FOR XML côté client avec le fournisseur SQLOLEDB traite les xml types de données comme des chaînes.

Mise en forme de documents XML côté client

Lorsqu’une application cliente exécute la requête suivante :

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

... seule cette partie de la requête est envoyée au serveur :

SELECT FirstName, LastName  
FROM   Person.Contact  

Le serveur exécute la requête et retourne un ensemble de lignes (qui contient FirstName et LastNamecolumns) au client. Le niveau intermédiaire applique ensuite la transformation FOR XML à l’ensemble de lignes et retourne la mise en forme XML au client.

De même, lorsque vous exécutez une requête XPath, le serveur retourne l’ensemble de lignes au client et la transformation FOR XML EXPLICIT est appliquée à l’ensemble de lignes sur le client, générant la mise en forme XML souhaitée.

Le tableau suivant montre les modes que vous pouvez spécifier avec FOR XML côté client.

Mode FOR XML côté client Commentaire
CRU Produit des résultats identiques lorsqu’ils sont spécifiés dans for XML côté client ou côté serveur.
IMBRIQUÉ Est similaire au mode AUTO FOR XML côté serveur.
EXPLICITE Est similaire au mode FOR XML EXPLICIT côté serveur.

Remarque

Si vous spécifiez le mode AUTO et demandez la mise en forme XML côté client, l’intégralité de la requête est envoyée au serveur ; autrement dit, la mise en forme XML se produit sur le serveur. Cela est fait pour des raisons pratiques, mais notez que le mode NESTED retourne des noms de table de base en tant que noms d’éléments dans le document XML généré. Certaines des applications que vous écrivez peuvent nécessiter des noms de tables de base. Par exemple, vous pouvez exécuter une procédure stockée et charger les données résultantes dans un jeu de données (dans Microsoft .NET Framework), puis générer ultérieurement un DiffGram pour mettre à jour les données dans les tables. Dans ce cas, vous avez besoin des informations de table de base et vous devrez utiliser le mode NESTED.

Avantages de la mise en forme XML côté client

Voici quelques avantages de la mise en forme XML sur le client.

Si vous avez des procédures stockées sur le serveur qui retournent un ensemble de lignes unique, vous pouvez demander la transformation FOR XML côté client pour générer un code XML.

Par exemple, considérez la procédure stockée suivante. Cette procédure retourne les prénoms et noms des employés de la table Person.Contact dans la base de données AdventureWorks :

IF EXISTS (SELECT name FROM sysobjects  
   WHERE name = 'GetContacts' AND type = 'P')  
   DROP PROCEDURE GetContacts  
GO  
CREATE PROCEDURE GetContacts  
AS  
    SELECT   FirstName, LastName  
    FROM     Person.Contact  

L’exemple de modèle XML suivant exécute la procédure stockée. La clause FOR XML est spécifiée après le nom de la procédure stockée.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Étant donné que l’attribut xml côté client est défini sur 1 (true) dans le modèle, la procédure stockée est exécutée sur le serveur et l’ensemble de lignes à deux colonnes retourné par le serveur est transformé en XML au niveau intermédiaire et retourné au client. (Seul un résultat partiel est affiché ici.)

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Remarque

Lorsque vous utilisez le fournisseur SQLXMLOLEDB ou les classes managées SQLXML, vous pouvez utiliser la propriété pour demander la ClientSideXml mise en forme XML côté client.

La charge de travail est plus équilibrée.

Étant donné que le client effectue la mise en forme XML, la charge de travail est équilibrée entre le serveur et le client, ce qui libère le serveur pour effectuer d’autres opérations.

Prise en charge de la mise en forme XML côté client

Pour prendre en charge la fonctionnalité de mise en forme XML côté client, SQLXML fournit :

  • fournisseur SQLXMLOLEDB

  • Classes managées SQLXML

  • Prise en charge améliorée du modèle XML

  • Propriété SqlXmlCommand.ClientSideXml

    Vous pouvez spécifier la mise en forme côté client en définissant cette propriété des classes managées SQLXML sur true.

Prise en charge améliorée des modèles XML

À compter de SQL Server 2005, le modèle XML dans SQL Server a été amélioré avec l’ajout de l’attribut xml côté client . Si cet attribut a la valeur true, xml est mis en forme sur le client. Notez que cet attribut de modèle est identique à la fonctionnalité de la propriété ClientSideXMLXML spécifique au fournisseur SQLXMLOLEDB.

Remarque

Si vous exécutez un modèle XML dans une application ADO qui utilise le fournisseur SQLXMLOLEDB et que vous spécifiez à la fois l’attribut xml côté client dans le modèle et la propriété ClientSideXML du fournisseur, la valeur spécifiée dans le modèle est prioritaire.

Voir aussi

Architecture de la mise en forme XML côté client et côté serveur (SQLXML 4.0)
FOR XML (SQL Server)
Considérations relatives à la sécurité FOR XML (SQLXML 4.0)
Prise en charge des types de données xml dans SQLXML 4.0
Classes managées SQLXML
Mise en forme XML côté client et côté serveur (SQLXML 4.0)
Objet SqlXmlCommand (classes managées SQLXML)
Données XML (SQL Server)