SQLXML 4.0 中的 DiffGrams 简介

本主题提供对 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 修改(更新或删除)的所有数据库表必须在 <before> 块中作为顶级元素出现。

  • <diffgr:errors>
    DiffGram 处理逻辑将忽略此可选块。

DiffGram 批注

这些批注是在 DiffGram 命名空间 "urn:schemas-microsoft-com:xml-diffgram-01" 中定义的:

  • ID
    该属性用于使 <before><DataInstance> 块中的元素配对。

  • hasChanges
    对于插入或更新操作,DiffGram 必须以值 insertedmodified 指定该属性。如果该属性未出现,则处理逻辑将忽略 <DataInstance> 中的相应元素,并且不执行任何更新。有关工作示例,请参阅 DiffGram 示例 (SQLXML 4.0)

  • parentID
    该属性在 DiffGram 中用于指定元素之间的父子关系。该属性仅出现在 >before< 块中。应用更新时,SQLXML 将使用它。在确定 DiffGram 中元素的处理顺序时,将使用该父子关系。

了解 DiffGram 处理逻辑

DiffGram 处理逻辑使用某些规则来确定操作是否是插入、更新或删除操作。下表描述了这些规则。

运算

说明

Insert

当元素出现在 <DataInstance> 块中但不在相应的 <before> 块中,并且在该元素上指定了 diffgr:hasChanges 属性 (diffgr:hasChanges=inserted) 时,DiffGram 指示插入操作。这种情况下,DiffGram 会将在 <DataInstance> 块中指定的记录实例插入到数据库中。

如果不指定 diffgr:hasChanges 属性,处理逻辑将忽略该元素,并且不执行任何插入。有关工作示例,请参阅 DiffGram 示例 (SQLXML 4.0)

Update

如果在 <before> 块中的元素在 <DataInstance> 块中有其对应的元素(即两个元素都有具有相同值的 diffgr:id 属性),并且用 <DataInstance> 中的该元素的值 modified 指定 diffgr:hasChanges 属性,则 DiffGram 指示更新操作。

如果不在 < DataInstance > 块中的该元素上指定 diffgr:hasChanges 属性,则处理逻辑返回错误。有关工作示例,请参阅 DiffGram 示例 (SQLXML 4.0)

如果在 <before> 块中指定 diffgr:parentID,则在确定更新记录的顺序时将使用由 parentID 指定的元素的父子关系。

Delete

当元素在 <before> 块中出现但不在对应的 <DataInstance> 块中出现时,DiffGram 指示删除操作。这种情况下,DiffGram 将从数据库中删除在 <before> 块中指定的记录实例。有关工作示例,请参阅 DiffGram 示例 (SQLXML 4.0)

如果在 <before> 块中指定 diffgr:parentID,则在确定删除记录的顺序时使用由 parentID 指定的元素的父子关系。

注意注意

参数无法传递到 DiffGrams。