Freigeben über


DiffGrams

Ein DiffGram ist ein XML-Format, das aktuelle und ursprüngliche Versionen von Datenelementen angibt. DataSet verwendet das DiffGram-Format, um seinen Inhalt zu laden und beizubehalten und um seinen Inhalt für die Übertragung über eine Netzwerkverbindung zu serialisieren. Wenn ein DataSet als DiffGram geschrieben wird, füllt es das DiffGram mit allen erforderlichen Informationen zum genauen Wiederherstellen des Inhalts (jedoch nicht des Schemas) von DataSet mit den Spaltenwerten aus der Original-Zeilenversion und der Current-Zeilenversion sowie mit Zeilenfehlerinformationen und Zeilenreihenfolgen.

Beim Senden und Abrufen eines DataSet über einen XML-Webdienst wird das DiffGram-Format implizit verwendet. Außerdem können Sie beim Laden des Inhalts eines DataSet aus XML mithilfe der ReadXml-Methode oder beim Schreiben des Inhalts eines DataSet in XML mithilfe der WriteXml-Methode festlegen, dass der Inhalt als DiffGram gelesen bzw. geschrieben werden soll. Weitere Informationen finden Sie unter Laden eines DataSet aus XML und Schreiben eines DataSet als XML-Daten.

Während das DiffGram-Format von .NET Framework primär als Serialisierungsformat für den Inhalt eines DataSet verwendet wird, können Sie mithilfe von DiffGrams auch Daten in Tabellen einer Microsoft SQL Server-Datenbank ändern.

DiffGram-Format

Das DiffGram-Format ist in drei Abschnitte unterteilt: in die aktuellen Daten, in die ursprünglichen Daten (d. h. die früheren Daten) und einen Fehlerabschnitt. Dies wird im folgenden Beispiel veranschaulicht.

<?xml version="1.0"?>
<diffgr:diffgram 
         xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
         xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <DataInstance>
   </DataInstance>

  <diffgr:before>
  </diffgr:before>

  <diffgr:errors>
  </diffgr:errors>
</diffgr:diffgram>

Das DiffGram-Format umfasst die folgenden Datenblöcke:

  • <DataInstance>
    Der Name dieses Elements, DataInstance, wird in dieser Dokumentation zu Erklärungszwecken verwendet. Ein DataInstance-Element stellt ein DataSet oder eine Zeile in einer DataTable dar. Anstelle von DataInstance enthält das Element den Namen des jeweiligen DataSet oder der entsprechendenDataTable. Dieser Block des DiffGram-Formats enthält die aktuellen Daten, wobei es keine Rolle spielt, ob diese ggf. geändert wurden. Ein Element oder eine Zeile, das bzw. die geändert wurde, wird mit der diffgr:hasChanges-Anmerkung angegeben.
  • <diffgr:before>
    Dieser Block des DiffGram-Formats enthält die ursprüngliche Version einer Zeile. Elemente in diesem Block werden mit Elementen im DataInstance-Block über die diffgr:id-Anmerkung verglichen.
  • <diffgr:errors>
    Dieser Block des DiffGram-Formats enthält Fehlerinformationen für eine bestimmte Zeile im DataInstance-Block. Elemente in diesem Block werden mit Elementen im DataInstance-Block über die diffgr:id-Anmerkung verglichen.

DiffGram-Anmerkungen

In DiffGrams wird eine Reihe von Anmerkungen verwendet, um auf Elemente aus den verschiedenen DiffGram-Blöcken Bezug zu nehmen, die unterschiedliche Zeilenversionen oder Fehlerinformationen im DataSet darstellen.

In der folgenden Tabelle werden die DiffGram-Anmerkungen beschrieben, die im DiffGram-Namespace urn:schemas-microsoft-com:xml-diffgram-v1 definiert sind.

Anmerkung Beschreibung

id

Wird verwendet, um Paare aus den Elementen im <diffgr:before>-Block und im <diffgr:errors>-Block und den Elementen im <DataInstance>-Block zu bilden. Werte mit der diffgr:id-Anmerkung haben das Format [Tabellenname][Zeilenbezeichner]. Beispiel: <Customers diffgr:id="Customers1">.

parentId

Gibt an, welches Element aus dem <DataInstance>-Block das übergeordnete Element des aktuellen Elements ist. Werte mit der diffgr:parentId-Anmerkung haben das Format [Tabellenname][Zeilenbezeichner]. Beispiel: <Orders diffgr:parentId="Customers1">.

hasChanges

Weist eine Zeile im <DataInstance>-Block als geändert aus. Die hasChanges-Anmerkung kann einen der drei folgenden Werte aufweisen:

inserted

Gibt eine Added-Zeile an.

modified

Gibt eine Modified-Zeile an, die eine Original-Zeilenversion im <diffgr:before>-Block enthält. Beachten Sie, dass Deleted-Zeilen über eine Original-Zeilenversion im <diffgr:before>-Block verfügen, dass jedoch im <DataInstance>-Block kein Element mit Anmerkungen vorhanden ist.

descent

Gibt ein Element an, für das mindestens ein untergeordnetes Element aus einer Beziehung zwischen übergeordneten und untergeordneten Elementen geändert wurde.

hasErrors

Gibt eine Zeile im <DataInstance>-Block mit einem RowError an. Das Fehlerelement wird im <diffgr:errors>-Block positioniert.

Error

Enthält den Text des RowError für ein bestimmtes Element im <diffgr:errors>-Block.

Das DataSet enthält weitere Anmerkungen, wenn sein Inhalt als DiffGram gelesen oder geschrieben wird. In der folgenden Tabelle werden diese zusätzlichen Anmerkungen beschrieben. Diese sind im Namespace urn:schemas-microsoft-com:xml-msdata definiert.

Anmerkung Beschreibung

RowOrder

Behält die Zeilenreihenfolge der ursprünglichen Daten bei und gibt den Index einer Zeile in einer bestimmten DataTable an.

Hidden

Gibt an, dass die ColumnMapping-Eigenschaft einer Spalte auf MappingType.Hidden festgelegt ist. Das Attribut ist im Format msdata:hidden[Spaltenname]="Wert" geschrieben. Beispiel: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner">.

Beachten Sie, dass ausgeblendete Spalten nur als DiffGram-Attribut geschrieben werden, wenn sie Daten enthalten. Andernfalls werden sie ignoriert.

Beispiel für ein DiffGram

Unten ist ein Beispiel für das DiffGram-Format aufgeführt. In diesem Beispiel wird das Ergebnis der Aktualisierung einer Tabellenzeile veranschaulicht, bevor ein Commit der Änderungen ausgeführt wird. Die Zeile mit der CustomerID "ALFKI" wurde geändert, jedoch nicht aktualisiert. Dementsprechend enthält der <DataInstance>-Block eine Current-Zeile mit einer diffgr:id von "Customers1", und der <diffgr:before>-Block enthält eine Original-Zeile mit einer diffgr:id von "Customers1". Die Zeile mit der CustomerID "ANATR" enthält einen RowError. Daher ist sie mit der Anmerkung diffgr:hasErrors="true" versehen, und der <diffgr:errors>-Block enthält ein entsprechendes Element.

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
  <CustomerDataSet>
    <Customers diffgr:id="Customers1" msdata:rowOrder="0" diffgr:hasChanges="modified">
      <CustomerID>ALFKI</CustomerID>
      <CompanyName>New Company</CompanyName>
    </Customers>
    <Customers diffgr:id="Customers2" msdata:rowOrder="1" diffgram:hasErrors="true">
      <CustomerID>ANATR</CustomerID>
      <CompanyName>Ana Trujillo Emparedados y Helados</CompanyName>
    </Customers>
    <Customers diffgr:id="Customers3" msdata:rowOrder="2">
      <CustomerID>ANTON</CustomerID>
      <CompanyName>Antonio Moreno Taquera</CompanyName>
    </Customers>
    <Customers diffgr:id="Customers4" msdata:rowOrder="3">
      <CustomerID>AROUT</CustomerID>
      <CompanyName>Around the Horn</CompanyName>
    </Customers>
  </CustomerDataSet>
  <diffgr:before>
    <Customers diffgr:id="Customers1" msdata:rowOrder="0">
      <CustomerID>ALFKI</CustomerID>
      <CompanyName>Alfreds Futterkiste</CompanyName>
    </Customers>
  </diffgr:before>
  <diffgr:errors>
    <Customers diffgr:id="Customers2" diffgr:Error="An optimistic concurrency violation has occurred for this row."/>
  </diffgr:errors>
</diffgr:diffgram>

Siehe auch

Konzepte

Laden eines DataSet aus XML
Schreiben eines DataSet als XML-Daten

Weitere Ressourcen

Verwenden von XML in einem DataSet
Verwenden von DataSets in ADO.NET