Раздел данных
В разделе данных определяются данные набора строк, а также любые ожидающие обновления, вставки или удаления. Раздел данных может содержать ноль или больше строк. Он может содержать только данные из одного набора строк, где строка определена схемой. Кроме того, как отмечалось ранее, столбцы без каких-либо данных могут быть опущены. Если атрибут или подэлемент используется в разделе данных и что конструкция не определена в разделе схемы, она автоматически игнорируется.
Строка
Зарезервированные XML-символы в текстовых данных должны быть заменены соответствующими сущностями символов. Например, в названии компании "Гараж Джо" одна кавычка должна быть заменена сущностью. Фактическая строка будет выглядеть следующим образом:
<z:row CompanyName="Joe's Garage"/>
Следующие символы зарезервированы в ФОРМАТЕ XML и должны быть заменены сущностями символов: {',",&;<>}.
Binary
Двоичные данные кодируются в кодировке bin.hex (то есть один байт сопоставляется с двумя символами, одним символом на nibble).
Дата/время
Вариант VT_DATE формат не поддерживается напрямую типами данных XML-Data. Правильный формат дат с данными и компонентом времени — y-mm-ddThh:mm:ss.
Дополнительные сведения о форматах дат, указанных XML, см . в спецификации W3C XML-Data.
Если спецификация XML-Data определяет два эквивалентных типа данных (например, i4 == int), ADO записывает понятное имя, но считывается в обоих случаях.
Управление ожидающих изменений
Набор записей можно открыть в режиме немедленного или пакетного обновления. Когда они открываются в режиме пакетного обновления с помощью клиентских курсоров, все изменения, внесенные в набор записей, находятся в состоянии ожидания до вызова метода UpdateBatch. Ожидающие изменения также сохраняются при сохранении набора записей. В XML они представлены с помощью элементов "update", определенных в urn:schemas-microsoft-com:rowset. Кроме того, если можно обновить набор строк, обновляемое свойство должно иметь значение true в определении строки. Например, чтобы определить, что таблица "Грузоотправители" содержит ожидающие изменения, определение строки будет выглядеть следующим образом.
<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>
Это указывает поставщику сохраняемости на поверхность данных, чтобы ADO могли создавать обновляемый объект Recordset.
В следующем примере данных показано, как вставки, изменения и удаления выглядят в сохраненном файле.
<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>
Обновление всегда содержит все исходные данные строки, за которыми следует измененные данные строки. Измененная строка может содержать все столбцы или только те столбцы, которые фактически изменились. В предыдущем примере строка для Shipper 2 не изменяется, и только столбец Телефон изменил значения для Shipper 3 и поэтому является единственным столбцом, включенным в измененную строку. Вставленные строки для грузоотправителей 12, 13 и 14 объединяются вместе под одним тегом rs:insert. Обратите внимание, что удаленные строки также можно пакетировать вместе, хотя это не показано в предыдущем примере.