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 修改的所有数据库表(已更新或删除)都必须在块前<>显示为顶级元素。

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

DiffGram 批注

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

id
此属性用于配对之前>和 DataInstance 块中的<元素。><

hasChanges
对于插入或更新作,DiffGram 必须使用插入或修改的值指定此属性。 如果此属性不存在,则处理逻辑忽略 DataInstance> 中的<相应元素,并且不会执行任何更新。 有关工作示例,请参阅 DiffGram 示例(SQLXML 4.0)。

parentID
此属性用于在 DiffGram 中的元素之间指定父子关系。 此属性仅在 <块前> 显示。 它由 SQLXML 应用更新时使用。 父子关系用于确定处理 DiffGram 中的元素的顺序。

了解 DiffGram 处理逻辑

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

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

如果未指定 diffgr:hasChanges 属性,则处理逻辑将忽略该元素,并且不执行插入。 有关工作示例,请参阅 DiffGram 示例(SQLXML 4.0)。
更新 DiffGram 指示在 DataInstance 块中存在相应元素的前>块中有<一个元素<(也就是说,这两个元素具有相同值的 diffgr:id 属性)和 diffgr:hasChanges 属性使用 DataInstance>>块中<修改的值指定时,更新作。

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

如果在前>块中<指定了 diffgr:parentID,则使用 parentID 指定的元素的父子关系来确定记录的更新顺序。
删除 DiffGram 指示当元素出现在前>一个块中<但不出现在相应的 <DataInstance> 块中时,删除作。 在这种情况下,DiffGram 将删除在 <数据库块之前> 指定的记录实例。 有关工作示例,请参阅 DiffGram 示例(SQLXML 4.0)。

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

注释

参数无法传递给 DiffGrams。