DiffGrams

DiffGram je formát XML, který identifikuje aktuální a původní verze datových prvků. Používá DataSet formát DiffGram k načtení a zachování jeho obsahu a k serializaci jeho obsahu pro přenos přes síťové připojení. DataSet Když je zapsán jako DiffGram, naplní DiffGram všemi potřebnými informacemi, aby přesně znovu vytvořil obsah, ačkoli ne schéma DataSet, hodnoty sloupců z verzí řádků jak z Original, tak z Current, informace o chybách řádků a jejich pořadí.

Při odesílání a načítání DataSet z webové služby XML se formát DiffGram implicitně používá. Kromě toho při načítání obsahu DataSet z XML pomocí ReadXml metody nebo při zápisu obsahu DataSet v JAZYCE XML pomocí WriteXml metody můžete určit, že obsah se čte nebo zapisuje jako DiffGram. Další informace najdete v tématu Načítání datové sady z XML a zápis obsahu datové sady jako dat XML.

Zatímco formát DiffGram je primárně používán rozhraním .NET Framework jako serializační formát pro obsah DataSet, můžete také použít formáty DiffGram k úpravě dat v tabulkách v databázi Microsoft SQL Server.

Diffgram je generován zápisem obsahu všech tabulek do elementu <diffgram> .

Generování diffgramu

  1. Vygenerujte seznam kořenových tabulek (to znamená tabulky bez nadřazenosti).

  2. Pro každou tabulku a její potomky v seznamu zapište aktuální verzi všech řádků v první části Diffgramu.

  3. Pro každou tabulku v tabulce DataSetzapište původní verzi všech řádků, pokud existuje, v <before> oddílu Diffgramu.

  4. U řádků s chybami zapište obsah chyby v <errors> části Diffgramu.

Diffgram se zpracovává v pořadí od začátku souboru XML až po konec.

Postup zpracování diffgramu

  1. Zpracujte první část diffgramu, která obsahuje aktuální verzi řádků.

  2. Zpracujte druhou nebo <before> část, která obsahuje původní verzi řádku řádků, které byly upraveny nebo odstraněny.

    Poznámka:

    Pokud je řádek označený jako odstraněný, operace odstranění může odstranit i potomky řádku v závislosti na Cascade vlastnosti aktuálního DataSet.

  3. Zpracujte <errors> oddíl. Nastavte informace o chybě pro zadaný řádek a sloupec pro každou položku v této části.

Poznámka:

Pokud nastavíte XmlWriteMode na Diffgram, obsah cílového DataSet a původního DataSet se může lišit.

DiffGram Format

Formát DiffGram je rozdělen do tří částí: aktuální data, původní data (nebo "před") a část s chybami, jak je znázorněno v následujícím příkladu.

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

Formát DiffGram se skládá z následujících bloků dat:

< DataInstance> Název tohoto elementu, DataInstance, se v této dokumentaci používá pro účely vysvětlení. Element DataInstance představuje DataSet nebo řádek DataTable. Místo instance DataInstance by prvek obsahoval název DataSet nebo DataTable. Tento blok formátu DiffGram obsahuje aktuální data, ať už byla upravena nebo ne. Prvek nebo řádek, který byl změněn, je identifikován pomocí diffgr:hasChanges poznámky .

<diffgr:before> Tento blok formátu DiffGram obsahuje původní verzi řádku. Prvky v tomto bloku se shodují s prvky v bloku instance DataInstance pomocí poznámky diffgr:id.

<diffgr:errors> Tento blok formátu DiffGram obsahuje informace o chybě pro konkrétní řádek v bloku DataInstance. Prvky v tomto bloku se shodují s prvky v bloku instance DataInstance pomocí poznámky diffgr:id.

DiffGram – poznámky

DiffGrams používá několik poznámek k relaci prvků z různých bloků DiffGram, které představují různé verze řádků nebo informace o chybách v objektu DataSet.

Následující tabulka popisuje poznámky DiffGram, které jsou definovány v oboru názvů DiffGram urn:schemas-microsoft-com:xml-diffgram-v1.

Poznámka Popis
id Slouží ke spárování prvků v blocích <diffgr:before> a <diffgr:errors> s prvky v bloku <DataInstance>. Hodnoty s poznámkou diffgr:id jsou ve formuláři [TableName][RowIdentifier]. Například: <Customers diffgr:id="Customers1">.
parentId Identifikuje, který prvek z <bloku DataInstance> je nadřazený prvek aktuálního elementu. Hodnoty s poznámkami diffgr:parentId jsou ve formuláři [TableName][RowIdentifier]. Například: <Orders diffgr:parentId="Customers1">.
hasChanges Identifikuje řádek v <bloku DataInstance> podle změny. Poznámka hasChanges může mít jednu z následujících dvou hodnot:

vložený
Identifikuje Added řádek.

upravený
Modified Identifikuje řádek, který obsahuje Original verzi řádku v <diffgr:before> bloku. Všimněte si, že Deleted řádky budou mít verzi řádku Original v <diffgr:before> bloku, ale v bloku <DataInstance> nebude žádný anotovaný prvek.
hasErrors Identifikuje řádek v bloku <DataInstance> s chybou RowError. Prvek chyby je umístěn v <diffgr:errors> bloku.
Error Obsahuje text konkrétního RowError prvku v <diffgr:errors> bloku.

DataSet obsahuje další poznámky při čtení nebo zápisu jeho obsahu ve formátu DiffGram. Následující tabulka popisuje tyto další poznámky, které jsou definovány v oboru názvů urn:schemas-microsoft-com:xml-msdata.

Poznámka Popis
Pořadí řádků Zachová pořadí řádků původních dat a identifikuje index řádku v určitém DataTablepořadí .
Schovaný Identifikuje sloupec jako vlastnost nastavenou ColumnMapping na MappingType.Hidden. Atribut je zapsán ve formátu msdata:hidden[ColumnName]="value". Například: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner">.

Všimněte si, že skryté sloupce jsou zapsány pouze jako atribut DiffGram, pokud obsahují data. Jinak se ignorují.

Ukázka DiffGram

Příklad formátu DiffGram je znázorněn níže. Tento příklad ukazuje výsledek aktualizace řádku v tabulce před potvrzením změn. Řádek s ID zákazníka "ALFKI" byl změněn, ale neaktualizován. Výsledkem je Current řádek s diffgr:id "Customers1" v < bloku DataInstance> a Original řádek s diffgr:id "Customers1" v <diffgr:before> bloku. Řádek s ID zákazníka "ANATR" obsahuje RowError, takže je poznámkován pomocí diffgr:hasErrors="true" a existuje související prvek v bloku <diffgr:errors>.

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

Viz také