このトピックでは、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 によって変更 (更新または削除) されるすべてのデータベース テーブルは、 <fore> ブロックの最上位要素として表示される必要があります。
<diffgr:errors>
この省略可能なブロックは、DiffGram 処理ロジックでは無視されます。
DiffGram 注釈
これらの注釈は、DiffGram 名前空間 "urn:schemas-microsoft-com:xml-diffgram-01" で定義されています。
ID
この属性は、 <before> および <DataInstance> ブロックの要素をペアにするために使用されます。
hasChanges
挿入操作または更新操作の場合、DiffGram は、挿入 または 変更された値でこの属性を指定する必要があります。 この属性が存在しない場合、<DataInstance> 内の対応する要素は処理ロジックによって無視され、更新は実行されません。 作業サンプルについては、 DiffGram の例 (SQLXML 4.0) を参照してください。
parentID
この属性は、DiffGram 内の要素間の親子関係を指定するために使用されます。 この属性は、 <before> ブロックにのみ表示されます。 更新プログラムを適用するときに SQLXML によって使用されます。 親子関係は、DiffGram 内の要素が処理される順序を決定するために使用されます。
DiffGram 処理ロジックについて
DiffGram 処理ロジックでは、特定の規則を使用して、操作が挿入、更新、または削除の操作であるかどうかを判断します。 これらの規則については、次の表で説明します。
| オペレーション | 説明 |
|---|---|
| [挿入] | DiffGram は、要素が <DataInstance> ブロック内に出現するが、対応する <before> ブロックには表示されず、要素に diffgr:hasChanges 属性が指定されている (diffgr:hasChanges=inserted) 場合に挿入操作を示します。 この場合、DiffGram は、<DataInstance> ブロックで指定されたレコード インスタンスをデータベースに挿入します。 diffgr:hasChanges 属性が指定されていない場合、要素は処理ロジックによって無視され、挿入は実行されません。 作業サンプルについては、 DiffGram の例 (SQLXML 4.0) を参照してください。 |
| 更新 | DiffGram は、<before> ブロック内に、<DataInstance> ブロックに対応する要素 (つまり、両方の要素に同じ値を持つ diffgr:id 属性があります) があり、diffgr:hasChanges 属性が <DataInstance> ブロック内の要素で変更された値で指定されている場合に、更新操作を示します。 <DataInstance> ブロック内の要素に diffgr:hasChanges 属性が指定されていない場合は、処理ロジックによってエラーが返されます。 作業サンプルについては、 DiffGram の例 (SQLXML 4.0) を参照してください。 <before> ブロックで diffgr:parentID が指定されている場合、parentID で指定された要素の親子関係は、レコードが更新される順序を決定するために使用されます。 |
| 削除 | DiffGram は、要素が <before> ブロック内に出現するが、対応する <DataInstance> ブロックには含まれていない場合に削除操作を示します。 この場合、DiffGram は、 <before> ブロックで指定されたレコード インスタンスをデータベースから削除します。 作業サンプルについては、 DiffGram の例 (SQLXML 4.0) を参照してください。 <before> ブロックで diffgr:parentID が指定されている場合、parentID で指定された要素の親子関係は、レコードが削除される順序を決定するために使用されます。 |
注
DiffGrams にパラメーターを渡すことはできません。