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, i když ne schématuDataSet, hodnot sloupců z původní i aktuální verze řádku, informace o chybě řádku a pořadí řádků.

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 metoda, nebo při zápisu obsahu DataSet xml pomocí WriteXml metoda, 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 diffGram formát je primárně používán rozhraní .NET Framework jako serializační formát pro obsah , DataSetmůžete také použít DiffGrams k úpravě dat v tabulkách v databázi Microsoft SQL Server.

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

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 DataSet, zapište původní verzi všech řádků, pokud existuje, v <předchozí> části diffgramu.

  4. Pro řádky s chybami zapište obsah chyby v <oddílu chyb> 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 <předchozí> část, která obsahuje původní verzi řádku upravených a odstraněných řádků.

    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 část s chybami><. Nastavte informace o chybě pro zadaný řádek a sloupec pro každou položku v této části.

Poznámka:

Pokud nastavíte XmlWriteMode hodnotu Diffgram, obsah cíle DataSet a původní 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:

<Instance DataInstance>
Název tohoto elementu DataInstance se používá pro účely vysvětlení v této dokumentaci. 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ách 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 bloku diffgr:before> a <diffgr:errors> k prvkům 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 přidaný řádek.

Upravené
Identifikuje upravený řádek, který obsahuje původní verzi řádku v <diffgr:before> block. Všimněte si, že Odstraněné řádky budou mít původní verzi řádku v< diffgr:before> block, ale v bloku DataInstance> nebude žádný anotovaný prvek<.
Haserrors Identifikuje řádek v <bloku DataInstance> s chybou RowError. Prvek chyby je umístěn v <bloku diffgr:errors> .
Chyba Obsahuje text RowError pro určitý prvek v< bloku diffgr:errors>.

Obsahuje DataSet další poznámky při čtení nebo zápisu jeho obsahu jako 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í .
Skryté Identifikuje sloupec jako vlastnost ColumnMapping nastavenou 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 rozdílového diagramu

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 důsledku toho existuje aktuální řádek s diffgr:id "Customers1" v <bloku DataInstance> a původní řádek s diffgr:id "Customers1" v< diffgr:before> bloku. Řádek s ID zákazníka "ANATR" obsahuje RowError, takže je opatřen poznámkami 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é