共用方式為


SQLXML 4.0 中的 DiffGram 簡介

本主題提供 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”

識別碼
這個屬性是用來將 before> 和 DataInstance 區塊中的<專案配對。><

hasChanges
對於插入或更新作業,DiffGram 必須指定此屬性,並插入或修改值。 如果此屬性不存在,處理邏輯會忽略 DataInstance> 中的<對應專案,而且不會執行任何更新。 如需工作範例,請參閱 DiffGram 範例(SQLXML 4.0)。

parentID
這個屬性是用來指定 DiffGram 中項目之間的父子關聯性。 此屬性只會出現在前>一個 區塊中<。 它由 SQLXML 套用更新時使用。 父子關聯性用於判斷處理 DiffGram 中項目的順序。

瞭解 DiffGram 處理邏輯

DiffGram 處理邏輯會使用特定規則來判斷作業是否為插入、更新或刪除作業。 下表說明這些規則。

行動 說明
插入 DiffGram 表示當元素出現在 DataInstance> 區塊中<,但未出現在對應的 <before> 區塊中,而 diffgr:hasChanges 属性則指定了元素上的插入作業(diffgr:hasChanges=inserted)。 在此情況下,DiffGram 會將 DataInstance> 區塊中指定的<記錄實例插入資料庫。

如果未指定 diffgr:hasChanges 屬性,處理邏輯會忽略元素,而且不會執行插入。 如需工作範例,請參閱 DiffGram 範例(SQLXML 4.0)。
更新 DataInstance> 區塊中有對應元素的 before 區塊中有對應的元素<時,DiffGram 會指出更新作業(也就是說,這兩個元素都有具有相同值的 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。