我们大家都知道DataSet对象提供三个事件:Disposed、Initialized 和 MergeFailed。这里我们只对ADO.NET MergeFailed事件做出详细的介绍。
ADO.NET MergeFailed事件
#T#DataSet 对象的最常用事件是 MergeFailed,当要合并的 DataSet 对象的架构发生冲突时,会引发该事件。当目标和源 DataRow 有相同的主键值,且 EnforceConstraints 属性设置为 true 时会发生这种情况。例如,如果所合并表的主键列与两个 DataSet 对象中的表的相同,则将发生异常并引发 MergeFailed 事件。传递给 MergeFailed 事件的 MergeFailedEventArgs 对象具有 Conflict 属性(标识两个 DataSet 对象之间的架构冲突)和 Table 属性(标识发生冲突的表的名称)。
下面的代码段演示如何为 ADO.NET 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
初始化ADO.NET MergeFailed事件
在 DataSet 构造函数初始化 DataSet 的新实例后会发生 Initialized 事件。
如果 DataSet 已完成初始化,IsInitialized 属性会返回 true;否则,返回 false。BeginInit 方法,它开始初始化 DataSet,将 IsInitialized 设置为 false。EndInit 方法(用于结束 DataSet 的初始化)将它设置为 true。Visual Studio 设计环境使用这些方法初始化其他组件使用的 DataSet。通常不会在代码中使用这些方法。
释放事件
DataSet 派生自 MarshalByValueComponent 类,该类可公开 Dispose 方法和 Disposed 事件。Disposed 事件添加了一个事件处理程序以侦听组件上已释放的事件。如果您要在调用 Dispose 方法时执行代码,则可以使用 DataSet 的 Disposed 事件。Dispose 释放由 MarshalByValueComponent 使用的资源。
DataSet 和 DataTable 对象继承 MarshalByValueComponent 并支持用于远程处理的 ISerializable 接口。这两个对象是***可远程处理的 ADO.NET 对象。有关更多信息,请参见.NET 远程处理。有关使用 DataSet 时的其他可用事件的信息,请参见处理 DataTable 事件 (ADO.NET)和处理 DataAdapter 事件 (ADO.NET)。