Delen via


DiffGrams

Een DiffGram is een XML-indeling die de huidige en oorspronkelijke versies van gegevenselementen identificeert. De DataSet indeling DiffGram wordt gebruikt om de inhoud ervan te laden en te behouden en om de inhoud ervan te serialiseren voor transport via een netwerkverbinding. Wanneer een DataSet is geschreven als een DiffGram, wordt het DiffGram gevuld met alle benodigde informatie om de inhoud nauwkeurig opnieuw te maken, maar niet het schema, van de DataSet, inclusief kolomwaarden uit zowel de oorspronkelijke als de huidige rijversies, rijfoutinformatie en rijvolgorde.

Bij het verzenden en ophalen van een XML-webservice DataSet wordt de DiffGram-indeling impliciet gebruikt. Daarnaast kunt u bij het laden van de inhoud van een DataSet XML met behulp van de methode ReadXml of bij het schrijven van de inhoud van een DataSet in XML met de methode WriteXml opgeven dat de inhoud moet worden gelezen of geschreven als een DiffGram. Zie Voor meer informatie het laden van een dataset uit XML en het schrijven van dataset-inhoud als XML-gegevens.

Hoewel de DiffGram-indeling voornamelijk wordt gebruikt door .NET Framework als serialisatie-indeling voor de inhoud van een DataSet, kunt u ook DiffGrams gebruiken om gegevens in tabellen in een Microsoft SQL Server-database te wijzigen.

Een Diffgram wordt gegenereerd door de inhoud van alle tabellen naar een <diffgram-element> te schrijven.

Een diffgram genereren

  1. Genereer een lijst met hoofdtabellen (dat wil gezegd tabellen zonder bovenliggende tabellen).

  2. Schrijf voor elke tabel en de bijbehorende onderliggende waarden in de lijst de huidige versie van alle rijen in de eerste sectie Diffgram uit.

  3. Noteer voor elke tabel in de DataSettabel de oorspronkelijke versie van alle rijen, indien aanwezig, in de <voorsectie> van het Diffgram.

  4. Schrijf voor rijen met fouten de foutinhoud in de <sectie fouten> van het Diffgram.

Een Diffgram wordt verwerkt in volgorde van het begin van het XML-bestand tot het einde.

Een diffgram verwerken

  1. De eerste sectie van het Diffgram verwerken dat de huidige versie van de rijen bevat.

  2. Verwerk de tweede of de <voorsectie> die de oorspronkelijke rijversie van gewijzigde en verwijderde rijen bevat.

    Notitie

    Als een rij is gemarkeerd als verwijderd, kan de verwijderbewerking ook de afstammelingen van de rij verwijderen, afhankelijk van de Cascade eigenschap van de huidige DataSet.

  3. <De sectie fouten> verwerken. Stel de foutinformatie in voor de opgegeven rij en kolom voor elk item in deze sectie.

Notitie

Als u het op XmlWriteMode Diffgram instelt, kan de inhoud van het doel DataSet en het origineel DataSet verschillen.

DiffGram-indeling

De DiffGram-indeling is onderverdeeld in drie secties: de huidige gegevens, de oorspronkelijke (of 'vóór'-gegevens) en een foutensectie, zoals wordt weergegeven in het volgende voorbeeld.

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

De DiffGram-indeling bestaat uit de volgende gegevensblokken:

<DataInstance>
De naam van dit element, DataInstance, wordt gebruikt voor uitlegdoeleinden in deze documentatie. Een DataInstance-element vertegenwoordigt een DataSet of een rij van een DataTable. In plaats van DataInstance bevat het element de naam van de DataSet of DataTable. Dit blok van de DiffGram-indeling bevat de huidige gegevens, ongeacht of deze zijn gewijzigd of niet. Een element of rij dat is gewijzigd, wordt geïdentificeerd met de aantekening diffgr:hasChanges .

<diffgr:before>
Dit blok van de DiffGram-indeling bevat de oorspronkelijke versie van een rij. Elementen in dit blok worden vergeleken met elementen in het DataInstance-blok met behulp van de aantekening diffgr:id .

<diffgr:errors>
Dit blok van de DiffGram-indeling bevat foutinformatie voor een bepaalde rij in het DataInstance-blok. Elementen in dit blok worden vergeleken met elementen in het DataInstance-blok met behulp van de aantekening diffgr:id .

DiffGram-aantekeningen

DiffGrams gebruikt verschillende aantekeningen om elementen van de verschillende DiffGram-blokken te relateren die verschillende rijversies of foutinformatie in de DataSet.

In de volgende tabel worden de DiffGram-aantekeningen beschreven die zijn gedefinieerd in de DiffGram-naamruimte urn:schemas-microsoft-com:xml-diffgram-v1.

Annotatie Description
id Wordt gebruikt om de elementen in het diffgr:before> en <diffgr:errors> te koppelen aan elementen in het< DataInstance-blok>.< Waarden met de aantekening diffgr:id zijn in de vorm [TableName][RowIdentifier]. Voorbeeld: <Customers diffgr:id="Customers1">.
parentId Hiermee wordt aangegeven welk element van het <DataInstance-blok> het bovenliggende element van het huidige element is. Waarden met de aantekening diffgr:parentId zijn in de vorm [TableName][RowIdentifier]. Voorbeeld: <Orders diffgr:parentId="Customers1">.
hasChanges Identificeert een rij in het <DataInstance-blok> als gewijzigd. De annotatie hasChanges kan een van de volgende twee waarden hebben:

Ingevoegd
Identificeert een toegevoegde rij.

Bewerkt
Identificeert een gewijzigde rij die een oorspronkelijke rijversie bevat in het <blok diffgr:before>. Verwijderde rijen hebben een oorspronkelijke rijversie in het< blok diffgr:before>, maar er is geen element met aantekeningen in het <DataInstance-blok.>
hasErrors Identificeert een rij in het <DataInstance-blok> met een RowError. Het foutelement wordt in het <blok diffgr:errors> geplaatst.
Fout Bevat de tekst van de RowError voor een bepaald element in het <blok diffgr:errors> .

De DataSet bevat aanvullende aantekeningen bij het lezen of schrijven van de inhoud als diffgram. In de volgende tabel worden deze aanvullende aantekeningen beschreven, die zijn gedefinieerd in de naamruimte urn:schemas-microsoft-com:xml-msdata.

Annotatie Beschrijving
Rijvolgorde Behoudt de rijvolgorde van de oorspronkelijke gegevens en identificeert de index van een rij in een bepaalde DataTable.
Verborgen Identificeert een kolom met een eigenschap ColumnMapping ingesteld op MappingType.Hidden. Het kenmerk is geschreven in de indeling msdata:hidden[ColumnName]="value". Voorbeeld: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner">.

Verborgen kolommen worden alleen geschreven als een DiffGram-kenmerk als ze gegevens bevatten. Anders worden ze genegeerd.

Voorbeeld van DiffGram

Hieronder ziet u een voorbeeld van de DiffGram-indeling. In dit voorbeeld ziet u het resultaat van een update naar een rij in een tabel voordat de wijzigingen zijn doorgevoerd. De rij met een CustomerID van 'ALFKI' is gewijzigd, maar niet bijgewerkt. Als gevolg hiervan is er een huidige rij met een diffgr:id van 'Customers1' in het< DataInstance-blok> en een oorspronkelijke rij met een diffgr:id van 'Customers1' in het <diffgr:before-blok>. De rij met een CustomerID van 'ANATR' bevat een RowError, dus deze wordt geannoteerd met diffgr:hasErrors="true" en er is een gerelateerd element in het <blok 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>  

Zie ook