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 必须以值 inserted 或 modified 指定该属性。如果该属性未出现,则处理逻辑将忽略 <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。 |