DataSet のイベント処理
DataSet オブジェクトには、 Disposed、 Initialized、 MergeFailedという 3 つのイベントがあります。
MergeFailed イベント
DataSet
オブジェクトのイベントの中で最も使用頻度が高いイベントは、マージしようとしている MergeFailed
オブジェクトのスキーマが競合する場合に発生する DataSet
です。 この状況は、ターゲットとソースの DataRow が同じ主キー値を持ち、なおかつ、 EnforceConstraints プロパティが true
に設定されている場合に発生します。 たとえば、マージ対象のテーブルの主キーの列が 2 つの DataSet
オブジェクトのテーブル間で同じ場合、例外がスローされ、 MergeFailed
イベントが発生します。 MergeFailedEventArgs イベントに渡される MergeFailed
オブジェクトには、2 つの Conflict オブジェクト間のスキーマで発生した競合を示す DataSet
プロパティ、および競合が発生したテーブルの名前を示す 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 プロパティは、 true
の初期化が完了した場合に DataSet
を返します。それ以外の場合は false
を返します。 この値は、 BeginInit の初期化を開始する DataSet
メソッドによって IsInitialized が false
に設定されます。 また、 EndInit の初期化を終了する DataSet
メソッドによって true
に設定されます。 これらのメソッドは、別のコンポーネントによって使用されている DataSet
を初期化するために、Visual Studio のデザイン環境によって使用されます。 通常、コード内で直接使用することはありません。
Disposed イベント
DataSet
は、 MarshalByValueComponent メソッドおよび Dispose イベントの両方を公開する Disposed クラスから派生しています。 Disposed イベントでは、コンポーネントが破棄されたことを伝えるイベントをリッスンするためのイベント ハンドラーが追加されます。 Dispose メソッドが呼び出されたときにコードを実行したい場合は、DataSet
の Disposed イベントを使用できます。 Dispose では、MarshalByValueComponent によって使用されたリソースが解放されます。
Note
DataSet
オブジェクトと DataTable
オブジェクトでは、MarshalByValueComponent が継承されていて、リモート処理用の ISerializable インターフェイスがサポートされています。 これらは、リモート処理ができる唯一の ADO.NET オブジェクトです。 詳しくは、「.NET リモート処理」をご覧ください。
DataSet
を操作するときに使用できる他のイベントについては、「DataTable イベントの処理」および「DataAdapter のイベント処理」をご覧ください。