DataSet のイベント処理 (ADO.NET)
DataSet オブジェクトには、Disposed、Initialized、MergeFailed という 3 つのイベントがあります。
MergeFailed イベント
DataSet オブジェクトのイベントの中で最も使用頻度が高いイベントは、マージしようとしている DataSet オブジェクトのスキーマが競合する場合に発生する MergeFailed です。 この状況は、ターゲットとソースの DataRow が同じ主キー値を持ち、なおかつ、EnforceConstraints プロパティが true に設定されている場合に発生します。 たとえば、マージ対象のテーブルの主キーの列が 2 つの DataSet オブジェクトのテーブル間で同じ場合、例外がスローされ、MergeFailed イベントが発生します。 MergeFailed イベントに渡される MergeFailedEventArgs オブジェクトには、2 つの DataSet オブジェクト間のスキーマで発生した競合を示す Conflict プロパティ、および競合が発生したテーブルの名前を示す Table プロパティがあります。
次のコードは、MergeFailed イベントのイベント ハンドラーを追加する方法を示しています。
AddHandler workDS.MergeFailed, New MergeFailedEventHandler( _
AddressOf DataSetMergeFailed)
Private Shared Sub DataSetMergeFailed( _
sender As Object,args As MergeFailedEventArgs)
Console.WriteLine("Merge failed for table " & args.Table.TableName)
Console.WriteLine("Conflict = " & args.Conflict)
End Sub
workDS.MergeFailed += new MergeFailedEventHandler(DataSetMergeFailed);
private static void DataSetMergeFailed(
object sender, MergeFailedEventArgs args)
{
Console.WriteLine("Merge failed for table " + args.Table.TableName);
Console.WriteLine("Conflict = " + args.Conflict);
}
Initialized イベント
Initialized イベントは、DataSet のコンストラクターによって DataSet の新しいインスタンスが初期化された後に発生します。
IsInitialized プロパティは、DataSet の初期化が完了した場合に true を返します。それ以外の場合は false を返します。 この値は、DataSet の初期化を開始する BeginInit メソッドによって IsInitialized が false に設定されます。 また、DataSet の初期化を終了する EndInit メソッドによって true に設定されます。 これらのメソッドは、別のコンポーネントによって使用されている DataSet を初期化する目的で、Visual Studio のデザイン環境によって使用されます。 通常、コード内で直接使用することはありません。
Disposed イベント
DataSet は、Dispose メソッドおよび Disposed イベントの両方を公開する MarshalByValueComponent クラスから派生しています。 Disposed イベントでは、コンポーネントが破棄されたことを伝えるイベントを待機するためのイベント ハンドラーを追加します。 DataSet の Disposed イベントを使用することで、Dispose メソッドが呼び出されたときにコードを実行できます。 Dispose は、MarshalByValueComponent で使用したリソースを解放します。
メモ |
---|
DataSet オブジェクトと DataTable オブジェクトは MarshalByValueComponent から継承し、リモート処理用の ISerializable インターフェイスをサポートします。これらは、リモート処理ができる唯一の ADO.NET オブジェクトです。詳細については、「Remote Objects」を参照してください。 |
DataSet の使用時に使用できるその他のイベントについては、「DataTable イベントの処理 (ADO.NET)」および「DataAdapter のイベント処理 (ADO.NET)」を参照してください。