Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
DiffGram - это формат XML, определяющий текущую и первоначальную версию элементов данных. Набор данных DataSet использует формат DiffGram для загрузки и хранения своего содержимого, а также для сериализации содержимого перед отправкой его по сетевому подключению.
DataSet Когда объект записывается как DiffGram, он заполняет DiffGram всеми необходимыми данными, чтобы точно воссоздать содержимое, хотя без схемы, включая значения столбцов из версий строк Original и Current, сведения об ошибках строк и порядок строк.
При отправке и получении набора данных DataSet из веб-службы XML формат DiffGram используется неявно. Кроме того, при загрузке содержимого DataSet из XML с помощью ReadXml метода или при написании содержимого DataSet в ФОРМАТЕ XML с помощью WriteXml метода можно указать, что содержимое будет прочитано или записано как DiffGram. Дополнительные сведения см. в разделе "Загрузка набора данных из XML и запись содержимого набора данных в виде XML-данных".
Хотя формат DiffGram в основном используется платформой .NET Framework как формат сериализации для содержимого набора данных DataSet, его можно также применять для изменения данных в таблицах базы данных Microsoft SQL Server.
Diffgram создается путем записи содержимого всех таблиц в элемент <diffgram>.
Создание Diffgram
Создайте список корневых таблиц (таблиц, не имеющих родителей).
Для каждой таблицы и ее потомков в списке запишите текущую версию всех строк в первом разделе Diffgram.
Для каждой таблицы в DataSet таблице запишите исходную версию всех строк, если таковые есть, в
<before>разделе Diffgram.Для строк с ошибками напишите содержимое ошибки в
<errors>разделе Diffgram.
Diffgram обрабатывается в последовательном порядке от начала XML-файла до его конца.
Обработка Diffgram
Обработайте первый раздел Diffgram, содержащий текущую версию строк.
Обработайте второй или
<before>раздел, содержащий исходную версию строк, которые были изменены или удалены.Примечание.
Если строка помечена как удаленная, то операция удаления может удалить потомков этой строки в зависимости от свойства
Cascadeтекущего набора данных DataSet.Обработайте
<errors>раздел. Установите сведения об ошибках для всех заданных строк и столбцов каждого элемента в этом разделе.
Примечание.
Если в Diffgram задан режим XmlWriteMode, то содержимое целевого набора DataSet и исходного набора DataSet могут различаться.
Формат дельт
Формат DiffGram содержит три раздела: текущие данные, исходные данные и раздел ошибок, как показано в следующем примере.
<?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>
Формат DiffGram состоит из следующих блоков данных:
< DataInstance> Имя этого элемента DataInstance используется в целях объяснения в этой документации. Элемент DataInstance представляет DataSet строку или строку DataTableобъекта. Вместо DataInstance элемент будет содержать имя DataSet илиDataTable. Этот блок формата DiffGram содержит текущие данные, независимо от изменений в этих данных. Элемент или строка, которая была изменена, идентифицируется с заметкой diffgr:hasChanges .
<diffgr:до> Этот блок формата DiffGram содержит исходную версию строки. Элементы в этом блоке сопоставляются с элементами блока DataInstance с помощью заметки diffgr:id .
<diffgr:errors> Этот блок формата DiffGram содержит сведения об ошибках для определенной строки в блоке DataInstance . Элементы в этом блоке сопоставляются с элементами блока DataInstance с помощью заметки diffgr:id .
Заметки дельт
В формате DiffGrams используется несколько заметок для связывания элементов из разных блоков DiffGram, представляющих разные версии строк или сведения об ошибках в DataSet.
В следующей таблице описаны заметки DiffGram, определенные в пространстве имен DiffGram urn:schemas-microsoft-com:xml-diffgram-v1.
| Номер | Описание |
|---|---|
id |
Используется для связывания элементов в блоках <diffgr:before> и <diffgr:errors> с элементами в блоке <DataInstance>. Значения с заметкой diffgr:id находятся в форме [TableName][RowIdentifier]. Например: <Customers diffgr:id="Customers1">. |
parentId |
Определяет, какой элемент из <блока DataInstance> является родительским элементом текущего элемента. Значения с заметкой diffgr:parentId находятся в форме [TableName][RowIdentifier]. Например: <Orders diffgr:parentId="Customers1">. |
hasChanges |
Определяет строку в блоке <DataInstance>, как изменено. Заметка hasChanges может иметь одно из следующих двух значений:Вставлен Определяет Added строку.модифицированный Определяет строку Modified, содержащую версию строки Original в блоке <diffgr:before>. Обратите внимание, что Deleted строки будут иметь Original версию строки в блоке <diffgr:before>, но в блоке <DataInstance> нет аннотированного элемента. |
hasErrors |
Определяет строку в блоке <с помощью RowError. Элемент ошибки помещается в <diffgr:errors> блок. |
Error |
Содержит текст RowError, относящийся к конкретному элементу в блоке <diffgr:errors>. |
Набор данных DataSet содержит дополнительные заметки при считывании или записи содержимого в формате DiffGram. В следующей таблице описываются эти дополнительные заметки, определенные в пространстве имен urn:schemas-microsoft-com:xml-msdata.
| Номер | Описание |
|---|---|
| RowOrder | Сохраняет порядок строк исходных данных и определяет индекс строки в конкретной таблице DataTable. |
| Скрыта | Определяет столбец, который имеет свойство ColumnMapping с установленным значением MappingType.Hidden. Атрибут записывается в формате msdata:hidden[ColumnName]="value". Например: <Customers diffgr:id="Customers1" msdata:hiddenContactTitle="Owner">.Обратите внимание, что скрытые столбцы записываются как атрибут DiffGram только если они содержат данные. В остальных случаях этот параметр игнорируется. |
Образец DiffGram
Ниже показан пример формата DiffGram. На нем показан результат обновления строки в таблице перед фиксацией изменений. Строка с идентификатором пользователя «ALFKI» была изменена, но не обновлена. В результате в блоке Current< имеется строка с идентификатором diffgr:id "Customers1" > и Original строкой с diffgr:id "Customers1" в блоке<diffgr:before>. Строка с CustomerID "ANATR" включает RowError, поэтому она аннотирована с использованием diffgr:hasErrors="true", и в блоке <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>