Sección de datos
La sección de datos define los datos del conjunto de filas junto con las actualizaciones, inserciones o eliminaciones pendientes. La sección de datos puede contener cero o más filas. Solo puede contener datos de un conjunto de filas donde el esquema define la fila. Además, como se indicó antes, se pueden omitir columnas sin datos. Si se usa un atributo o un subelemento en la sección de datos y esa construcción no se ha definido en la sección de esquema, se omite silenciosamente.
Cuerda
Los caracteres XML reservados de los datos de texto deben reemplazarse por las entidades de caracteres adecuadas. Por ejemplo, en el nombre de la compañía "Joe's Garage", la comilla única debe reemplazarse por una entidad. La fila real sería similar a la siguiente:
<z:row CompanyName="Joe's Garage"/>
Los siguientes caracteres están reservados en XML y deben reemplazarse por entidades de caracteres: {',",&,<,>}.
Binario
Los datos binarios están codificados en bin.hex (es decir, un byte se asigna a dos caracteres, un carácter por nibble).
FechaHora
El formato variante VT_DATE no es compatible directamente con los tipos de datos XML-Data. El formato correcto para las fechas con un componente de datos y hora es aaaa-mm-ddThh:mm:ss.
Para obtener más información sobre los formatos de fecha especificados por XML, vea la especificación de XML-Data W3C.
Cuando la especificación de XML-Data define dos tipos de datos equivalentes (por ejemplo, i4 == int), ADO escribirá el nombre descriptivo, pero reconocerá ambos.
Administración de cambios pendientes
Un objeto Recordset se puede abrir en modo de actualización inmediata o modo de actualización por lotes. Cuando se abren en modo de actualización por lotes con cursores del lado cliente, todos los cambios realizados en el objeto Recordset se encuentran en un estado pendiente hasta que se llama al método UpdateBatch. Los cambios pendientes también se mantienen cuando se guarda el Recordset. En XML, se representan mediante el uso de los elementos "update" definidos en urn:schemas-microsoft-com:rowset. Además, si se puede actualizar un conjunto de filas, la propiedad actualizable debe establecerse en true en la definición de la fila. Por ejemplo, para definir que la tabla Shippers contiene cambios pendientes, la definición de fila tendría un aspecto similar al siguiente.
<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>
Esto indica al proveedor de persistencia que muestre datos para que ADO pueda construir un objeto Recordset actualizable.
En los datos de ejemplo siguientes se muestra cómo las inserciones, los cambios y las eliminaciones se ven en el archivo persistente.
<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>
Una actualización siempre contiene los datos de fila originales completos seguidos de los datos de fila modificados. La fila modificada puede contener todas las columnas o solo las columnas que realmente han cambiado. En el ejemplo anterior, la fila de Shipper 2 no cambia y solo la columna Phone ha cambiado los valores de Shipper 3 y, por tanto, es la única columna incluida en la fila modificada. Las filas insertadas para los remitentes 12, 13 y 14 se agrupan en una etiqueta rs:insert. Tenga en cuenta que las filas eliminadas también se pueden agrupar por lotes, aunque esto no se muestra en el ejemplo anterior.