Einführung in DiffGrams für SQLXML 4.0

Dieses Thema bietet eine kurze Einführung in DiffGrams.

DiffGram-Format

Das allgemeine DiffGram-Format sieht folgendermaßen aus:

<?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 besteht aus den folgenden Blöcken:

  • <DataInstance>
    Der Name des Elements DataInstance wird in dieser Dokumentation zur Erläuterung verwendet. Wenn das DiffGram beispielsweise aus einem Dataset im .NET Framework generiert wird, dann wird dieses Element mit dem Wert der Name-Eigenschaft des Datasets benannt. Dieser Block enthält nach der Änderung alle relevanten Daten, möglicherweise auch die Daten, die nicht geändert wurden. Die DiffGram-Verarbeitungslogik ignoriert die Elemente in einem Block, für den das diffgr:hasChanges-Attribut nicht angegeben wurde.

  • <diffgr:before>
    Dieser optionale Block enthält die ursprünglichen Datensatzinstanzen (Elemente), die aktualisiert oder gelöscht werden müssen. Alle Datenbanktabellen, die vom DiffGram modifiziert (aktualisiert oder gelöscht) werden, müssen im <before>-Block als Elemente der obersten Ebene enthalten sein.

  • <diffgr:errors>
    Dieser optionale Block wird von der DiffGram-Verarbeitungslogik ignoriert.

DiffGram-Anmerkungen

Diese Anmerkungen sind im DiffGram-Namespace "urn:schemas-microsoft-com:xml-diffgram-01" definiert:

  • id
    Dieses Attribut wird verwendet, um die Elemente im <before>-Block und die Elemente im <DataInstance>-Block paarweise zuzuordnen.

  • hasChanges
    Für einen Einfügen- oder Aktualisierenvorgang muss dieses Attribut im DiffGram mit dem Wert inserted bzw. modified angegeben werden. Wenn dieses Attribut nicht angegeben wird, wird das zugehörige Element im <DataInstance>-Element von der Verarbeitungslogik ignoriert, und es werden keine Aktualisierungen durchgeführt. Funktionstüchtige Vorlagen hierzu finden Sie unter DiffGram-Beispiele (SQLXML 4.0).

  • parentID
    Mit diesem Attribut werden Parent-Child-Beziehungen unter den Elementen des DiffGrams angegeben. Dieses Attribut wird nur im <before>-Block verwendet. Es wird von SQLXML beim Übernehmen von Aktualisierungen genutzt. Anhand der Parent-Child-Beziehungen wird die Reihenfolge bestimmt, in der die Elemente des DiffGrams verarbeitet werden.

Grundlegendes zur DiffGram-Verarbeitungslogik

Die DiffGram-Verarbeitungslogik verwendet bestimmte Regeln, um zu bestimmen, ob es sich bei einem Vorgang um einen Einfüge-, Aktualisieren- oder Löschvorgang handelt. Diese Regeln werden in der folgenden Tabelle beschrieben.

Vorgang

Beschreibung

Einfügen

Ein DiffGram zeigt einen Einfügevorgang an, wenn ein Element im <DataInstance>-Block, jedoch nicht im entsprechenden <before>-Block enthalten ist und das diffgr:hasChanges-Attribut (diffgr:hasChanges=inserted) für das Element angegeben wurde. In diesem Fall fügt das DiffGram die Datensatzinstanz, die im <DataInstance>-Block angegeben wurde, in die Datenbank ein.

Wenn das diffgr:hasChanges-Attribut nicht angegeben wurde, wird das Element von der Verarbeitungslogik ignoriert und kein Einfügevorgang ausgeführt. Funktionstüchtige Vorlagen hierzu finden Sie unter DiffGram-Beispiele (SQLXML 4.0).

Aktualisieren

Das DiffGram zeigt einen Aktualisierungsvorgang an, wenn es ein Element im <before>-Block enthält, zu dem ein entsprechendes Element im <DataInstance>-Block gegeben ist (d. h., bei beiden Elementen hat das diffgr:id-Attribut den gleichen Wert) und für das Element im <DataInstance>-Block das diffgr:hasChanges-Attribut mit dem Wert modified angegeben wurde.

Wenn das diffgr:hasChanges-Attribut für das Element im <DataInstance>-Block nicht angegeben wurde, wird von der Verarbeitungslogik ein Fehler zurückgegeben. Funktionstüchtige Beispiele hierzu finden Sie unter DiffGram-Beispiele (SQLXML 4.0).

Wenn das diffgr:parentID-Attribut im <before>-Block angegeben wird, dann wird anhand der Parent-Child-Beziehung der Elemente, die durch parentID angegeben werden, die Reihenfolge festgelegt, in der die Datensätze aktualisiert werden.

Löschen

Ein DiffGram zeigt einen Löschvorgang an, wenn ein Element im <before>-Block, jedoch nicht im zugehörigen <DataInstance>-Block erscheint. In diesem Fall löscht das DiffGram die Datensatzinstanz, die im <before>-Block angegeben wurde, aus der Datenbank. Funktionstüchtige Beispiele hierzu finden Sie unter DiffGram-Beispiele (SQLXML 4.0).

Wenn das diffgr:parentID-Attribut im <before>-Block angegeben wird, dann wird anhand der Parent-Child-Beziehung der Elemente, die durch parentID angegeben werden, die Reihenfolge festgelegt, in der die Datensätze gelöscht werden.

HinweisHinweis

DiffGrams können keine Parameter übergeben werden.