Megosztás a következőn keresztül:


DiffGrams

A DiffGram egy XML-formátum, amely az adatelemek aktuális és eredeti verzióit azonosítja. A DataSet DiffGram formátum használatával betölti és megőrzi a tartalmát, és szerializálja a tartalmát egy hálózati kapcsolaton keresztüli átvitelhez. Ha egy DataSet DiffGram-ként van megírva, feltölti a DiffGramot az összes szükséges információval, hogy pontosan újra létre lehessen hozni az eredeti és az aktuális sorverzióból származó oszlopértékeket, a sorhibaadatokat és a sorsorrendet, de a sémát DataSetnem.

XML-webszolgáltatásból való DataSet küldéskor és lekéréskor a DiffGram formátum implicit módon lesz használva. Ezenkívül ha egy DataSet XML-fájl tartalmát a ReadXml metódussal tölti be, vagy ha egy DataSet XML-fájl tartalmát a WriteXml metódussal írja be, megadhatja, hogy a tartalom DiffGramként legyen olvasható vagy írható. További információ: Adathalmaz betöltése XML-ből és adathalmaz tartalmának XML-adatként való írása.

Bár a DiffGram formátumot elsősorban a .NET-keretrendszer használják szerializálási formátumként egy DataSetadott tartalomhoz, a DiffGrams használatával módosíthatja a Microsoft SQL Server-adatbázisok tábláiban lévő adatokat.

A Diffgram úgy jön létre, hogy az összes tábla tartalmát egy <diffgramelembe> írja.

Diffgram létrehozása

  1. Hozzon létre egy listát a gyökértáblákról (azaz a szülő nélküli táblákról).

  2. A listában szereplő összes tábla és azok leszármazottai esetében írja ki az első Diffgram-szakasz összes sorának aktuális verzióját.

  3. A Diffgram előző> szakaszában DataSetírja ki az összes sor eredeti verzióját, ha van ilyen<.

  4. A hibákat tartalmazó sorok esetében írja be a hibatartalmat> a <Diffgram hibaszakaszában.

A Diffgram feldolgozása az XML-fájl elejétől a végéig történik.

Diffgram feldolgozása

  1. Dolgozza fel a sorok aktuális verzióját tartalmazó Diffgram első szakaszát.

  2. Dolgozza fel a <módosított és törölt sorok eredeti sorverzióját tartalmazó második vagy előző> szakaszt.

    Feljegyzés

    Ha egy sor törölve van jelölve, a törlési művelet az aktuális DataSettulajdonságtól függően Cascade a sor leszármazottait is törölheti.

  3. <A hibák> szakasz feldolgozása. Adja meg a szakasz egyes elemeihez tartozó megadott sor és oszlop hibaadatait.

Feljegyzés

Ha a XmlWriteMode Diffgram értéket állítja be, a cél DataSet és az eredeti DataSet tartalma eltérhet.

DiffGram formátum

A DiffGram formátum három részre van osztva: az aktuális adatokra, az eredeti (vagy "korábbi") adatokra, valamint egy hibaszakaszra, ahogyan az az alábbi példában látható.

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

A DiffGram formátum a következő adatblokkokból áll:

< DataInstance >
Ennek az elemnek a neve, a DataInstance a jelen dokumentációban magyarázati célokra szolgál. A DataInstance elem egy DataSet vagy több sort DataTablejelöl. A DataInstance helyett az elem az vagy DataTable.DataSet A DiffGram formátum ezen blokkja tartalmazza az aktuális adatokat, függetlenül attól, hogy módosították-e vagy sem. A módosított elemet vagy sort a diffgr:hasChanges széljegyzet azonosítja.

<diffgr:before>
A DiffGram formátum ezen blokkja egy sor eredeti verzióját tartalmazza. A blokk elemei a diffgr:id széljegyzet használatával megegyeznek a DataInstance blokk elemeivel.

<diffgr:errors>
A DiffGram-formátum ezen blokkja hibainformációkat tartalmaz a DataInstance blokk egy adott sorához. A blokk elemei a diffgr:id széljegyzet használatával megegyeznek a DataInstance blokk elemeivel.

DiffGram-széljegyzetek

A DiffGrams több széljegyzetet használ a különböző DiffGram-blokkok elemeinek összekapcsolására, amelyek a különböző sorverziókat vagy hibainformációkat jelölik a DataSet.

Az alábbi táblázat a DiffGram névtér urn:schemas-microsoft-com:xml-diffgram-v1 fájljában definiált DiffGram-széljegyzeteket ismerteti.

Jegyzet Leírás
id A diffgr:before> és <a< diffgr:errors blokk elemeinek> párosítására szolgál a< DataInstance > blokk elemeihez. A diffgr:id széljegyzetet tartalmazó értékek az űrlapon [TableName][RowIdentifier]találhatók. Például: <Customers diffgr:id="Customers1">
parentId Azonosítja, hogy a < DataInstance > blokk melyik eleme az aktuális elem szülőeleme. A diffgr:parentId széljegyzetet tartalmazó értékek az űrlapon [TableName][RowIdentifier]találhatók. Például: <Orders diffgr:parentId="Customers1">
hasChanges A DataInstance blokk egy sorát < azonosítja módosítottként. > A hasChanges széljegyzet az alábbi két érték egyikével rendelkezhet:

Behelyezett
Egy hozzáadott sort azonosít.

módosított
Egy módosított sort azonosít, amely az eredeti sorverziót tartalmazza a< diffgr:before> blokkban. Vegye figyelembe, hogy a törölt sorok eredeti sorverziója a <diffgr:before> blokkban lesz, de a < DataInstance > blokkban nem lesz széljegyzetes elem.
hasErrors A DataInstance blokk egy sorát < azonosítja egy RowErrorrel. > A hibaelem a <diffgr:errors> blokkba kerül.
Hiba A diffgr:errors> blokk egy adott eleméhez <tartozó RowError szöveget tartalmazza.

A DataSet tartalom DiffGramként való olvasása vagy írása során további megjegyzéseket is tartalmaz. Az alábbi táblázat az urn:schemas-microsoft-com:xml-msdata névtérben definiált további széljegyzeteket ismerteti.

Jegyzet Leírás
RowOrder Megőrzi az eredeti adatok sorsorrendét, és azonosítja az adott DataTablesor indexét.
Rejtett Egy oszlopot a MappingType.Hidden értékre állított ColumnMapping tulajdonságként azonosít. Az attribútum msdata:hidden [ColumnName]="value" formátumban van megírva. Például: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner">

Vegye figyelembe, hogy a rejtett oszlopok írása csak DiffGram-attribútumként történik, ha adatokat tartalmaznak. Ellenkező esetben a rendszer figyelmen kívül hagyja őket.

DiffGram-minta

Alább látható egy példa a DiffGram formátumra. Ez a példa azt mutatja be, hogy a módosítások véglegesítése előtt a tábla egy sorára frissült. Az "ALFKI" ügyfélazonosítóval rendelkező sor módosult, de nem frissült. Ennek eredményeképpen a DataInstance > blokkban< egy "Customers1" diffgr:id azonosítójú Aktuális sor, a blokk előtt> pedig egy "Customers1" (Ügyfelek1)< diffgr:id azonosítójával rendelkező eredeti sor található. Az "ANATR" customerID azonosítójú sor tartalmaz egy RowErrort, így a sor megjegyzésekkel diffgr:hasErrors="true" van el elemmel elosztva.><

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

Lásd még