Datenabschnitt

Der Datenabschnitt definiert die Daten des Rowsets sowie ausstehende Aktualisierungen, Einfügungen oder Löschungen. Der Datenabschnitt kann null oder mehr Zeilen enthalten. Er kann nur Daten aus einem Rowset enthalten, in dem die Zeile durch das Schema definiert ist. Wie zuvor erwähnt, können auch Spalten ohne Daten weggelassen werden. Wenn ein Attribut oder Unterelement im Datenabschnitt verwendet wird und dieses Konstrukt nicht im Schemaabschnitt definiert wurde, wird es einfach ignoriert.

String

Reservierte XML-Zeichen in Textdaten müssen durch entsprechende Zeichenentitäten ersetzt werden. So muss beispielsweise im Firmennamen „Joe's Garage“ das einfache Anführungszeichen durch eine Entität ersetzt werden. Die tatsächliche Zeile würde wie folgt aussehen:

<z:row CompanyName="Joe's Garage"/>  

Die folgenden Zeichen sind in XML reserviert und müssen durch Zeichenentitäten ersetzt werden: {',",&,<,>}.

Binary

Binärdaten sind bin.hex-codiert (d. h. ein Byte entspricht zwei Zeichen, ein Zeichen pro Halbbyte).

Datetime

Das abweichende VT_DATE-Format wird von XML-Datentypen nicht direkt unterstützt. Das korrekte Format für Datumsangaben mit einer Datums- und Zeitkomponente ist jjjj-mm-ttThh:mm:ss.

Weitere Informationen zu XML-Datumsformaten finden Sie in der W3C-XML-Datenspezifikation.

Wenn die XML-Datenspezifikation zwei gleichwertige Datentypen definiert (z. B. i4 == int), gibt ActiveX Data Objects (ADO) den Anzeigenamen aus, liest aber beide.

Verwalten ausstehender Änderungen

Ein Recordset kann im sofortigen Aktualisierungsmodus oder Batchaktualisierungsmodus geöffnet werden. Wird ein Recordset im Batchaktualisierungsmodus mit clientseitigen Cursorn geöffnet, sind alle am Recordset vorgenommenen Änderungen im Status „ausstehend“, bis die UpdateBatch-Methode aufgerufen wird. Ausstehende Änderungen werden auch persistiert, wenn das Recordset gespeichert wird. In XML werden sie durch die in „urn:schemas-microsoft-com:rowset“ definierten „update“-Elemente dargestellt. Wenn ein Rowset aktualisiert werden kann, muss zudem die aktualisierbare Eigenschaft in der Definition der Zeile auf „true“ festgelegt werden. Wenn Sie beispielsweise definieren möchten, dass die Tabelle „Shippers“ ausstehende Änderungen enthält, sieht die Zeilendefinition wie folgt aus.

<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>  

Dadurch wird der Persistenzanbieter angewiesen, Daten verfügbar zu machen, damit ADO ein aktualisierbares Recordset-Objekt erstellen kann.

Die folgenden Beispieldaten zeigen, wie Einfügungen, Änderungen und Löschungen in der persistierten Datei aussehen.

<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>  

Eine Aktualisierung enthält immer die gesamten ursprünglichen Zeilendaten gefolgt von den geänderten Zeilendaten. Die geänderte Zeile kann alle Spalten oder nur die Spalten enthalten, die tatsächlich geändert wurden. Im vorherigen Beispiel wird die Zeile für Shipper 2 nicht geändert, und nur die Spalte „Phone“ enthält geänderte Werte für Shipper 3. Daher ist dies die einzige Spalte, die in der geänderten Zeile enthalten ist. Die eingefügten Zeilen für Shipper 12, 13 und 14 werden unter einem rs:insert-Tag in einem Batch zusammengefasst. Gelöschte Zeilen können ebenfalls in einem Batch zusammengefasst werden, dies ist im vorherigen Beispiel jedoch nicht dargestellt.

Weitere Informationen

Beibehalten von Datensätzen im XML-Format