DiffGrams 的 SQLXML 4.0 簡介

本主題提供 DiffGram 的簡介。

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 處理邏輯會使用特定規則來判斷某項作業是插入、更新或刪除作業。下表將描述這些規則。

作業

說明

插入

當某個元素顯示在 <DataInstance> 區塊中,但並未顯示在對應的 <before> 區塊中,而且已針對該元素指定 diffgr:hasChanges 屬性 (diffgr:hasChanges=inserted) 時,DiffGram 就代表插入作業。在此情況下,DiffGram 會將 <DataInstance> 區塊中指定的記錄執行個體插入資料庫中。

如果沒有指定 diffgr:hasChanges 屬性,處理邏輯就會忽略此元素,而且不會執行任何插入作業。如需實用範例,請參閱<DiffGram 範例 (SQLXML 4.0)>。

更新

當 <before> 區塊中存在某個元素而 <DataInstance> 區塊中存在對應的元素 (亦即,這兩個元素都具有相同的 diffgr:id 屬性值),而且已使用 modified 值針對 <DataInstance> 區塊中的元素指定 diffgr:hasChanges 屬性時,DiffGram 就代表更新作業。

如果沒有針對 <DataInstance> 區塊中的元素指定 diffgr:hasChanges 屬性,處理邏輯就會傳回錯誤。如需實用範例,請參閱<DiffGram 範例 (SQLXML 4.0)>。

如果已在 <before> 區塊中指定 diffgr:parentIDparentID 所指定之元素的父子式關聯性就會用於決定更新記錄的順序。

刪除

當某個元素顯示在 <before> 區塊中,但並未顯示在對應的 <DataInstance> 區塊中時,DiffGram 就代表刪除作業。在此情況下,DiffGram 會從資料庫中刪除在 <before> 區塊中指定的記錄執行個體。如需實用範例,請參閱<DiffGram 範例 (SQLXML 4.0)>。

如果已在 <before> 區塊中指定 diffgr:parentIDparentID 所指定之元素的父子式關聯性就會用於決定刪除記錄的順序。

[!附註]

參數無法傳遞給 DiffGram。