資料區段
資料區段會定義資料列集的資料,以及任何擱置的更新、插入或刪除。 資料區段可以包含零或多個資料列。 它只能包含一個資料列集的資料;該資料列集的資料列由結構描述定義。 此外,如先前所述,可以省略不含任何資料的資料行。 如果在資料區段中使用屬性或子元素,而且尚未在結構描述區段中定義該建構,則會以無訊息方式忽略。
String
文字資料中保留的 XML 字元必須取代為適當的字元實體。 例如,在公司名稱「Joe's Garage」中,單引號必須取代為實體。 實際資料列如下所示:
<z:row CompanyName="Joe's Garage"/>
下列字元會保留於 XML 中,且必須由字元實體取代: {',“,<>}。
Binary
二進位資料採 bin.hex 編碼 (也就是一個位元組對應至兩個字元,每個半位元組一個字元)。
Datetime
XML-Data 資料類型不直接支援變體 VT_DATE 格式。 含資料和時間元件的日期正確格式為 yyyy-mm-ddThh:mm:ss。
如需 XML 指定日期格式的詳細資訊,請參閱 W3C XML-Data 規格。
當 XML-Data 規格定義兩個對等資料類型 (例如 i4 == int) 時,ADO 會寫出自訂名稱,但同時讀取兩者。
正在管理暫止的變更
Recordset 可以在立即或批次更新模式中開啟。 以用戶端資料指標在批次更新模式中開啟 Recordset 時,對 Recordset 所做的所有變更都會處於暫止狀態,直到呼叫 UpdateBatch 方法為止。 儲存 Recordset 時,也會保存暫止的變更。 在 XML 中,它們是以 urn:schemas-microsoft-com:rowset 中所定義的「update」元素來表示。 此外,如果可以更新資料列集,則可更新的屬性必須在資料列的定義中設定為 true。 例如,若要定義 Shippers 資料表包含暫止的變更,資料列定義看起來會像以下這樣。
<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 的資料列未變更,而且只有 Phone 資料行已變更 Shipper 3 的值,因此是唯一包含在已變更資料列中的資料行。 Shippers 12、13 及 14 的插入資料列會在一個 rs:insert 標籤下一起批次處理。 請注意,雖然上述範例中未顯示已刪除的資料列,但這些資料列也可以一起批次處理。