Section de données
La section de données définit les données de l’ensemble de lignes, ainsi que toutes les mises à jour, insertions ou suppressions en attente. La section de données peut contenir zéro ou plusieurs lignes. Elle ne peut contenir que des données d’un ensemble de lignes où la ligne est définie par le schéma. Par ailleurs, comme indiqué précédemment, les colonnes sans données peuvent être omises. En cas d’utilisation d’un attribut ou d’un sous-élément dans la section de données, si cette construction n’a pas été définie dans la section de schéma, elle est ignorée silencieusement.
Chaîne
Les caractères XML réservés dans les données texte doivent être remplacés par des entités de caractères appropriées. Par exemple, dans le nom de société « Joe’s Garage », l’apostrophe doit être remplacée par une entité. La ligne réelle ressemblera à ceci :
<z:row CompanyName="Joe's Garage"/>
Les caractères suivants sont réservés en XML, et doivent être remplacés par des entités de caractères : {’,",&,<,>}.
Binaire
Les données binaires sont codées en bin.hex (autrement dit, un octet est mappé à deux caractères, un caractère par quartet).
Date/Heure
La format variant VT_DATE n’est pas directement pris en charge par les types de données XML-Data. Le format correct pour les dates avec un composant de date et heure est aaaa-mm-jjThh:mm:ss.
Pour plus d’informations sur les formats de date spécifiés par XML, consultez la Spécification W3C XML-Data.
Lorsque la spécification XML-Data définit deux types de données équivalents (par exemple, i4 == int), ADO écrit le nom convivial mais lit les deux.
Gestion des modifications en attente
Un Recordset peut être ouvert en mode mise à jour immédiate ou par lot. Quand elles sont ouvertes en mode de mise à jour par lots avec des curseurs côté client, toutes les modifications apportées au Recordset sont en attente jusqu’à ce que la méthode UpdateBatch soit appelée. Les modifications en attente sont également conservées lors de l’enregistrement du Recordset. En XML, elles sont représentées par l’utilisation des éléments « update » définis dans urn:schemas-microsoft-com:rowset. En outre, si un ensemble de lignes peut être mis à jour, la propriété pouvant être mise à jour doit être définie sur true dans la définition de la ligne. Par exemple, pour spécifier que la table Shippers contient des modifications en attente, la définition de ligne ressemblerait à ceci.
<s:ElementType name="row" content="eltOnly" updatable="true">
<s:attribute type="ShipperID"/>
<s:attribute type="CompanyName"/>
<s:attribute type="Phone"/>
<s:extends type="rs:rowbase"/>
</s:ElementType>
Cela indique au Fournisseur de persistance de faire apparaître des données afin qu’ADO puisse construire un objet Recordset pouvant être mis à jour.
Les exemples de données suivants montrent à quoi ressemblent les insertions, les modifications et les suppressions dans le fichier persistant.
<rs:data>
<z:row ShipperID="2" CompanyName="United Package"
Phone="(503) 555-3199"/>
<rs:update>
<rs:original>
<z:row ShipperID="3" CompanyName="Federal Shipping"
Phone="(503) 555-9931"/>
</rs:original>
<z:row Phone="(503) 552-7134"/>
</rs:update>
<rs:insert>
<z:row ShipperID="12" CompanyName="Lightning Shipping"
Phone="(505) 111-2222"/>
<z:row ShipperID="13" CompanyName="Thunder Overnight"
Phone="(505) 111-2222"/>
<z:row ShipperID="14" CompanyName="Blue Angel Air Delivery"
Phone="(505) 111-2222"/>
</rs:insert>
<rs:delete>
<z:row ShipperID="1" CompanyName="Speedy Express" Phone="(503) 555-9831"/>
</rs:delete>
</rs:data>
Une mise à jour contient toujours les données de ligne d’origine entières, suivies des données de ligne modifiées. La ligne modifiée peut contenir toutes les colonnes ou seulement les colonnes qui ont réellement changé. Dans l’exemple précédent, la ligne pour Shipper 2 n’est pas modifiée. Seule la colonne Phone contient des valeurs modifiées pour Shipper 3. Elle est donc la seule colonne incluse dans la ligne modifiée. Les lignes insérées pour Shipper 12, Shipper 13 et Shipper 14 sont regroupées dans un lot sous une étiquette rs:insert. Notez que des lignes supprimées peuvent également être regroupées par lot, même si cela n’apparaît pas dans l’exemple précédent.