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 subelemento en la sección de datos y esa construcción no se ha definido en la sección de esquema, se omite silenciosamente.
Cadena
Los caracteres XML reservados de los datos de texto deben reemplazarse por entidades de caracteres adecuadas. Por ejemplo, en el nombre de la compañía "Joe's Garage", la comilla simple debe reemplazarse por una entidad. La fila real sería similar a la siguiente:
<z:row CompanyName="Joe's Garage"/>
Los caracteres siguientes 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).
DateTime
El formato de VT_DATE variante no es compatible directamente con XML-Data tipos de datos. 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 se leerá en ambos.
Gestión de cambios pendientes
Un objeto Recordset se puede abrir en modo de actualización inmediata o 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 conservan cuando se guarda el objeto 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.
Los siguientes datos ilustrativos muestran cómo se muestran las inserciones, los cambios y las eliminaciones 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 aquellas que han cambiado realmente. En el ejemplo anterior, la fila de Shipper 2 no se 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 procesan por lotes en una etiqueta rs:insert. Tenga en cuenta que las filas eliminadas también se pueden procesar por lotes, aunque esto no se muestra en el ejemplo anterior.