Udostępnij przez


Elementy DiffGram

DiffGram to format XML, który identyfikuje bieżące i oryginalne wersje elementów danych. Używa DataSet formatu DiffGram do ładowania i utrwalania jego zawartości oraz serializacji jego zawartości do transportu przez połączenie sieciowe. Gdy element DataSet jest zapisywany jako DiffGram, wypełnia DiffGram wszystkimi niezbędnymi informacjami, aby dokładnie odtworzyć zawartość DataSet, choć nie schematu, w tym wartości kolumn z obu wersji wierszy Original i Current, informacje o błędzie wiersza i kolejność wierszy.

Podczas wysyłania i pobierania elementu DataSet z usługi sieci Web XML format DiffGram jest używany niejawnie. Ponadto podczas ładowania zawartości DataSet z pliku XML przy użyciu ReadXml metody lub podczas zapisywania zawartości DataSet w pliku XML przy użyciu WriteXml metody można określić, że zawartość będzie odczytywana lub zapisywana jako DiffGram. Aby uzyskać więcej informacji, zobacz Ładowanie zestawu danych z formatu XML i zapisywanie zawartości zestawu danych jako danych XML.

Chociaż format DiffGram jest używany głównie przez program .NET Framework jako format serializacji zawartości DataSetelementu , można również użyć diffGrams do modyfikowania danych w tabelach w bazie danych programu Microsoft SQL Server.

Diffgram jest generowany przez zapisanie zawartości wszystkich tabel do <diffgram> elementu.

Aby wygenerować diffgram

  1. Wygeneruj listę tabel głównych (czyli tabele bez żadnego elementu nadrzędnego).

  2. Dla każdej tabeli i jej elementów podrzędnych na liście zapisz bieżącą wersję wszystkich wierszy w pierwszej sekcji Diffgram.

  3. Dla każdej tabeli w DataSet pliku zapisz oryginalną wersję wszystkich wierszy, jeśli takie istnieją, w sekcji <before> Diffgram.

  4. W przypadku wierszy, które mają błędy, zapisz zawartość błędu w <errors> sekcji diffgramu.

Diffgram jest przetwarzany w kolejności od początku pliku XML do końca.

Aby przetworzyć diffgram

  1. Przetwórz pierwszą sekcję diffgramu, która zawiera bieżącą wersję wierszy.

  2. Przetwórz drugą lub sekcję <before> zawierającą oryginalną wersję wiersza zmodyfikowanych i usuniętych wierszy.

    Uwaga

    Jeśli wiersz zostanie oznaczony jako usunięty, operacja usuwania może również usunąć elementy podrzędne wiersza, w zależności od Cascade właściwości bieżącej DataSet.

  3. Przetwórz sekcję <errors>. Ustaw informacje o błędzie dla określonego wiersza i kolumny dla każdego elementu w tej sekcji.

Uwaga

Jeśli ustawisz XmlWriteMode wartość Diffgram, zawartość obiektu docelowego DataSet i oryginalna DataSet może się różnić.

DiffGram Format

Format DiffGram jest podzielony na trzy sekcje: bieżące dane, oryginalne dane (lub "przed") oraz sekcję błędów, jak pokazano w poniższym przykładzie.

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

Format DiffGram składa się z następujących bloków danych:

< DataInstance> Nazwa tego elementu, DataInstance, jest używana do celów objaśnienia w tej dokumentacji. Element DataInstance reprezentuje DataSet wiersz DataTablelub . Zamiast klasy DataInstance element będzie zawierać nazwę DataSet elementu lub DataTable. Ten blok formatu DiffGram zawiera bieżące dane, niezależnie od tego, czy został zmodyfikowany, czy nie. Element lub wiersz, który został zmodyfikowany, jest identyfikowany z adnotacją diffgr:hasChanges .

<diffgr:before> Ten blok formatu DiffGram zawiera oryginalną wersję wiersza. Elementy w tym bloku są dopasowywane do elementów w bloku DataInstance przy użyciu adnotacji diffgr:id .

<diffgr:errors> Ten blok formatu DiffGram zawiera informacje o błędzie dla określonego wiersza w bloku DataInstance . Elementy w tym bloku są dopasowywane do elementów w bloku DataInstance przy użyciu adnotacji diffgr:id .

Adnotacje diffGram

DiffGramy używają kilku adnotacji do powiązania elementów z różnych bloków DiffGram, które reprezentują różne wersje wierszy lub informacje o błędzie w obiekcie DataSet.

W poniższej tabeli opisano adnotacje DiffGram zdefiniowane w przestrzeni nazw DiffGram urn:schemas-microsoft-com:xml-diffgram-v1.

Adnotacja opis
id Używane do parowania elementów w blokach <diffgr:before> i <diffgr:errors> z elementami w bloku <DataInstance>. Wartości z adnotacją diffgr:id są w postaci [TableName][RowIdentifier]. Na przykład: <Customers diffgr:id="Customers1">.
parentId Określa, który element z <bloku DataInstance> jest elementem nadrzędnym bieżącego elementu. Wartości z adnotacją diffgr:parentId są w postaci [TableName][RowIdentifier]. Na przykład: <Orders diffgr:parentId="Customers1">.
hasChanges Identyfikuje wiersz w bloku DataInstance<modyfikacją. Adnotacja hasChanges może mieć jedną z następujących dwóch wartości:

Wstawiony
Identyfikuje wiersz Added.

Zmodyfikowano
Identyfikuje wiersz, który zawiera wersję wiersza Original w bloku <diffgr:before>. Należy pamiętać, że wiersze będą miały wersję wiersza w bloku, ale w bloku DataInstance nie będzie żadnego elementu z adnotacją.
hasErrors Identyfikuje wiersz w < za pomocą polecenia RowError. Element błędu znajduje się w bloku <diffgr:errors>.
Error Zawiera tekst RowError dla konkretnego elementu w bloku <diffgr:errors>.

Zawiera DataSet dodatkowe adnotacje podczas odczytywania lub zapisywania jego zawartości jako DiffGram. W poniższej tabeli opisano te dodatkowe adnotacje zdefiniowane w przestrzeni nazw urn:schemas-microsoft-com:xml-msdata.

Adnotacja opis
Kolejność wierszy Zachowuje kolejność wierszy oryginalnych danych i identyfikuje indeks wiersza w określonym DataTableobiekcie .
Ukryty Identyfikuje kolumnę, w której właściwość ColumnMapping jest ustawiona na MappingType.Hidden. Atrybut jest zapisywany w formacie msdata:hidden[ColumnName]="value". Na przykład: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner">.

Należy pamiętać, że ukryte kolumny są zapisywane tylko jako atrybut DiffGram, jeśli zawierają dane. W przeciwnym razie są one ignorowane.

Przykładowy diffGram

Poniżej przedstawiono przykład formatu DiffGram. W tym przykładzie pokazano wynik aktualizacji wiersza w tabeli przed zatwierdzeniu zmian. Wiersz o identyfikatorze CustomerID "ALFKI" został zmodyfikowany, ale nie został zaktualizowany. W związku z tym w bloku <DataInstance> znajduje się wiersz z identyfikatorem diffgr:id "Customers1", oraz w bloku <diffgr:before> wiersz z identyfikatorem diffgr:id "Customers1". Wiersz z identyfikatorem CustomerID wartości "ANATR" zawiera element RowError, dlatego jest oznaczony adnotacją diffgr:hasErrors="true" i istnieje powiązany element w <diffgr:errors> bloku.

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

Zobacz też