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 就必須使用 inserted 或 modified 值來指定這個屬性。 如果這個屬性不存在,處理邏輯就會忽略 <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:parentID,parentID 所指定之元素的父子式關聯性就會用於決定更新記錄的順序。 |
刪除 |
當某個元素顯示在 <before> 區塊中,但並未顯示在對應的 <DataInstance> 區塊中時,DiffGram 就代表刪除作業。 在此情況下,DiffGram 會從資料庫中刪除在 <before> 區塊中指定的記錄執行個體。 如需實用範例,請參閱<DiffGram 範例 (SQLXML 4.0)>。 如果已在 <before> 區塊中指定 diffgr:parentID,parentID 所指定之元素的父子式關聯性就會用於決定刪除記錄的順序。 |
[!附註]
參數無法傳遞給 DiffGram。