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 du code XML dans la couche intermédiaire.
[!REMARQUE]
Cette rubrique fournit des informations supplémentaires sur l'utilisation de la clause FOR XML côté client ; elle suppose que la clause FOR XML vous est déjà familière. Pour plus d'informations sur FOR XML, consultez Construction de code XML à l'aide de FOR XML.
Important : pour utiliser les fonctionnalités de FOR XML côté client avec le nouveau type de données xml, les clients doivent toujours recourir au fournisseur de données de SQL Server Native Client (SQLNCLI10) au lieu du fournisseur SQLOLEDB. SQLNCLI10 est la version la plus récente du fournisseur SQL Server et prend complètement en charge les types de données introduits dans SQL Server 2005. Avec l'utilisation de FOR XML côté client et du fournisseur SQLOLEDB, les types de données sont traités en tant que chaînes xml.
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 (lequel contient les colonnes FirstName et LastName) au client. La couche intermédiaire applique ensuite la transformation FOR XML à l'ensemble de lignes et retourne la mise en forme XML au client.
De la même façon, 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, ce qui génère 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 |
---|---|
RAW |
Produit des résultats identiques lors de la spécification de FOR XML côté client ou côté serveur. |
NESTED |
Est semblable au mode FOR XML AUTO côté serveur. |
EXPLICIT |
Est semblable au mode FOR XML EXPLICIT côté serveur. |
[!REMARQUE]
Si vous spécifiez le mode AUTO et si vous demandez une mise en forme XML côté client, la requête entière est envoyée au serveur ; en d'autres termes, la mise en forme XML s'effectue sur le serveur. Cela répond à une question de commodité. Toutefois, notez que le mode NESTED retourne les noms de tables 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 dataset (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 sur les tables de base et vous devez utiliser le mode NESTED.
Avantages de la mise en forme XML côté client
Vous trouverez ci-après la description de certains avantages liés à 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 une transformation FOR XML côté client pour générer du code XML.
Prenons l'exemple de la procédure stockée ci-dessous. Cette procédure retourne les noms et prénoms des employés à partir de la table Person.Contact de 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>
Dans la mesure où l'attribut client-side-xml a la valeur 1 (true) dans le modèle, la procédure stockée est exécutée sur le serveur ; par ailleurs, l'ensemble de lignes à deux colonnes retourné par le serveur est transformé en code XML dans la couche intermédiaire avant d'être retourné au client. (Seul un résultat partiel est montré 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é ClientSideXml pour demander une mise en forme XML côté client.
La charge de travail est plus équilibrée.
Dans la mesure où le client effectue la mise en forme XML, la charge de travail est équilibrée entre le serveur et le client, ce qui permet au serveur d'exécuter d'autres tâches.
Prise en charge de la mise en forme XML côté client
Pour permettre la prise en charge des fonctionnalités de mise en forme XML côté client, SQLXML offre les éléments suivants :
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 à true.
Prise en charge améliorée du modèle XML.
Depuis SQL Server 2005, le modèle XML de SQL Server a été amélioré grâce à l'ajout de l'attribut client-side-xml. Si cet attribut a la valeur true, le code XML est mis en forme sur le client. Notez que cet attribut de modèle est identique en termes de fonctionnalités à la propriété SQLXMLOLEDB spécifique au fournisseur ClientSideXML.
[!REMARQUE]
Si vous exécutez un modèle XML dans une application ADO qui utilise le fournisseur SQLXMLOLEDB, et si vous spécifiez à la fois l'attribut client-side-xml dans le modèle et la propriété ClientSideXML du fournisseur, la valeur spécifiée dans le modèle est prioritaire.
Voir aussi