Behandeln von DataSet-Ereignissen
Das DataSet -Objekt stellt die folgenden drei Ereignisse bereit: Disposed, Initializedund MergeFailed.
Das "MergeFailed"-Ereignis
Das am häufigsten verwendete Ereignis des DataSet
-Objekts ist MergeFailed
. Dieses Ereignis wird ausgelöst, wenn sich die Schemas der DataSet
-Objekte, die zusammengeführt werden, widersprechen. Zu einem solchen Konflikt kommt es, wenn eine Ziel- und eine Quell- DataRow den gleichen Primärschlüsselwert besitzen und die EnforceConstraints -Eigenschaft auf true
gesetzt ist. Wenn z. B. die zusammenzuführenden Primärschlüsselspalten einer Tabelle in den Tabellen der beiden DataSet
-Objekte identisch sind, wird eine Ausnahme ausgegeben und das MergeFailed
-Ereignis ausgelöst. Das MergeFailedEventArgs -Objekt, das an das MergeFailed
-Ereignis übergeben wird, besitzt eine Conflict -Eigenschaft, die den Konflikt im Schema der beiden DataSet
-Objekte kennzeichnet, sowie eine Table -Eigenschaft, die den Namen der Tabelle mit dem Konflikt angibt.
Das folgende Codefragment zeigt, wie ein Ereignishandler für das MergeFailed
-Ereignis hinzugefügt werden kann.
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);
}
Das "Initialized"-Ereignis
Das Initialized -Ereignis tritt ein, nachdem der DataSet
-Konstruktor eine neue Instanz vom DataSet
initialisiert hat.
Die IsInitialized -Eigenschaft gibt true
zurück, wenn die Initialisierung vom DataSet
abgeschlossen wurde. Andernfalls wird false
zurückgegeben. Die BeginInit -Methode, die die Initialisierung eines DataSet
startet, setzt IsInitialized auf false
. Durch die EndInit -Methode, die die Initialisierung eines DataSet
beendet, wird der Wert auf true
gesetzt. Diese Methoden werden von der Visual Studio-Entwicklungsumgebung zum Initialisieren eines DataSet
genutzt, das von einer anderen Komponente verwendet wird. Im Normalfall werden Sie diese Methoden in Ihrem Code nicht benötigen.
Das "Disposed"-Ereignis
DasDataSet
wird von der MarshalByValueComponent -Klasse abgeleitet, die sowohl die Dispose -Methode als auch das Disposed -Ereignis verfügbar macht. Mit dem Disposed-Ereignis wird ein Ereignishandler hinzugefügt, der in der Komponente auf das Eintreten des Disposed-Ereignisses lauscht. Sie können das Disposed-Ereignis eines DataSet
verwenden, wenn beim Aufrufen der Dispose-Methode Code ausgeführt werden soll. Dispose gibt die von der MarshalByValueComponent verwendeten Ressourcen frei.
Hinweis
Das DataSet
-Objekt und das DataTable
-Objekt erben von MarshalByValueComponent und unterstützen die ISerializable-Schnittstelle für das Remoting. Dies sind die einzigen ADO.NET-Objekte, die remotingfähig sind. Weitere Informationen finden Sie unter .NET: Remoting.
Informationen zu anderen Ereignissen, die beim Arbeiten mit einem DataSet
verfügbar sind, finden Sie unter Behandeln von DataTable-Ereignissen und Behandeln von DataAdapter-Ereignissen.