本主题简要介绍了 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。