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
Hozzon létre egy listát a gyökértáblákról (azaz a szülő nélküli táblákról).
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.
A Diffgram előző> szakaszában DataSetírja ki az összes sor eredeti verzióját, ha van ilyen<.
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
Dolgozza fel a sorok aktuális verzióját tartalmazó Diffgram első szakaszát.
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.<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>