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 lehessen hozni a tartalmat, bár nem a sémát, beleértve DataSet a Original és Current sorverziókból származó oszlopértékeket, a sorhibákat és a sorsorrendet is.

XML-webszolgáltatásból való DataSet küldéskor és lekéréskor a DiffGram formátum implicit módon lesz használva. Ha egy XML-fájl tartalmát DataSet a metódussal ReadXml tölti be, vagy ha egy XML-fájl tartalmát DataSet a metódussal WriteXml í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 <diffgram> elembe í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 DataSet szakaszában írja ki minden <before> tábla összes sorának eredeti verzióját, ha van ilyen.

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

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 a <before> szakaszt.

    Megjegyzés

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

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

Megjegyzés

Ha a XmlWriteMode értékét Diffgramra állítja, 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 a DataSet vagy DataTable nevét tartalmazná. 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> Ez a blokk a DiffGram formátum tartalmazza a sor eredeti verzióját. A blokk elemei a diffgr:id széljegyzet használatával megegyeznek a DataInstance blokk elemeivel.

<diffgr:errors> A DiffGram formátumnak ez a blokkja a DataInstance blokk egy adott sorának hibainformációit tartalmazza. 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.

Annotáció Leírás
id A és blokkok elemeinek párosítására szolgál a DataInstance blokk elemeivel. A diffgr:id széljegyzetet tartalmazó értékek a [TableName][RowIdentifier] formában vannak. 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 [TableName][RowIdentifier] formában vannak. Például: <Orders diffgr:parentId="Customers1">
hasChanges A DataInstance blokk egy sorát <azonosítja módosítottként.> A hasChanges széljegyzet a következő két érték egyikével rendelkezhet:

Behelyezett
Azonosít egy Added sort.

módosított
Az Modified blokkban egy Original sorverziót tartalmazó <diffgr:before> sort azonosítja. Vegye figyelembe, hogy Deleted a soroknak lesz egy Original sorverziója a <diffgr:before> blokkban, de a <DataInstance> blokkban nem lesz széljegyzetes elem.
hasErrors Meghatároz egy sort a <DataInstance> blokkon belül egy RowError hibával. A hibaelem a <diffgr:errors> blokkba kerül.
Error Egy adott elem RowError szövegét tartalmazza a <diffgr:errors> blokkban.

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.

Annotáció Leírás
RowOrder Megőrzi az eredeti adatok sorsorrendét, és azonosítja az adott DataTablesor indexét.
Rejtett Egy oszlopot ColumnMapping a MappingType.Hidden tulajdonságra állított 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, hogy hogyan néz ki egy frissítés eredménye egy tábla során azelőtt, hogy a módosításokat véglegesítenék. Az "ALFKI" ügyfélazonosítóval rendelkező sor módosult, de nem frissült. Ennek eredményeképpen a Current< blokkban található egy "Customers1" diffgr:id azonosítójú sor, a blokkban >Original pedig egy "Customers1" <diffgr:before> sor. Az "ANATR" ügyfélazonosítójú sor tartalmaz egy RowErrort, így meg van jelölve diffgr:hasErrors="true"-el, és van egy kapcsolódó elem a <diffgr:errors> blokkban.

<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