Поделиться через


Общие сведения о DiffGrams в SQLXML 4.0

В этом разделе представлено краткое введение в DiffGrams.

Формат DiffGram

Это общий формат 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 используется в целях объяснения в этой документации. Например, если DiffGram был создан из набора данных в .NET Framework, значение свойства Name набора данных будет использоваться в качестве имени этого элемента. Этот блок содержит все соответствующие данные после изменения, возможно, включая данные, которые не были изменены. Логика обработки DiffGram игнорирует элементы в этом блоке, для которых атрибут diffgr:hasChanges не указан.

<diffgr:before>
Этот необязательный блок содержит исходные экземпляры записей (элементы), которые должны быть обновлены или удалены. Все таблицы базы данных, которые изменяются (обновляются или удаляются) DiffGram, должны отображаться как элементы верхнего уровня в блоке перед> блоком<.

<diffgr:errors>
Этот необязательный блок игнорируется логикой обработки DiffGram.

Заметки DiffGram

Эти заметки определены в пространстве имен DiffGram "urn:schemas-microsoft-com:xml-diffgram-01":

идентификатор
Этот атрибут используется для связывания элементов в <блоках ранее> и <DataInstance> .

hasChanges
Для операции вставки или обновления DiffGram должен указать этот атрибут со значением, вставленным или измененным. Если этот атрибут отсутствует, соответствующий элемент в <DataInstance> игнорируется логикой обработки, и обновления не выполняются. Примеры работы см. в примерах DiffGram (SQLXML 4.0).

parentID
Этот атрибут используется для указания отношений "родительский-дочерний" между элементами в DiffGram. Этот атрибут отображается только в блоке перед> блоком<. Он используется SQLXML при применении обновлений. Связь "родительский-дочерний" используется для определения порядка обработки элементов в DiffGram.

Общие сведения о логике обработки DiffGram

Логика обработки DiffGram использует определенные правила, чтобы определить, является ли операция вставкой, обновлением или удалением. Эти правила описаны в следующей таблице.

Операция Описание
Вставить DiffGram указывает операцию вставки, когда элемент отображается в <блоке DataInstance>, но не в соответствующем <блоке,> а атрибут diffgr:hasChanges указан (diffgr:hasChanges=inserted) в элементе. В этом случае DiffGram вставляет экземпляр записи, указанный в блоке <DataInstance> в базу данных.

Если атрибут diffgr:hasChanges не указан, элемент игнорируется логикой обработки и не выполняется вставка. Примеры работы см. в примерах DiffGram (SQLXML 4.0).
Обновление DiffGram указывает операцию обновления, если в блоке перед> блоком есть соответствующий элемент <в блоке DataInstance (то есть оба элемента имеют атрибут diffgr:id с одинаковым значением), а атрибут diffgr:hasChanges указывается со значением, измененным для элемента в блоке DataInstance>.<><

Если атрибут diffgr:hasChanges не указан в элементе в блоке <DataInstance> , ошибка возвращается логикой обработки. Примеры работы см. в примерах DiffGram (SQLXML 4.0).

Если diffgr:parentID указывается в блоке <перед> блоком, связь элементов с родительским дочерним элементом, заданными родительским идентификатором, используется для определения порядка обновления записей.
Удалить DiffGram указывает операцию удаления, когда элемент отображается в блоке <перед> блоком, но не в соответствующем <блоке DataInstance> . В этом случае DiffGram удаляет экземпляр записи, указанный <в блоке до> блокировки из базы данных. Примеры работы см. в примерах DiffGram (SQLXML 4.0).

Если diffgr:parentID указывается в блоке <перед> блоком, связь элементов с родительским дочерним элементом, заданными родительским идентификатором, используется для определения порядка удаления записей.

Замечание

Параметры нельзя передать в DiffGrams.