Salut,
Je travaille sur une application qui manipule une base Oracle Lite. Actuellement, le code utilise explicitement le provider ADO.NET qui va bien. Je suis en train de modifier le code pour le rendre (à peu près) indépendant du SGBD. J'utilise donc DbProviderFactory et les classes de System.Data.Common.
Globalement, pas de gros problèmes pour effectuer la migration, sauf un truc : l'évènement RowUpdated, qui existe dans toutes les classes *DataAdapter, n'est pas dans la classe de base DbDataAdapter... or j'ai absolument besoin de cet évènement car je dois logger toutes les commandes SQL exécutées.
J'ai donc essayé d'ajouter un handler à l'évènement via la réflexion :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private static void AddEventHandler(DbDataAdapter adapter, string eventName, Delegate handler) { EventInfo ev = adapter.GetType().GetEvent(eventName); ev.AddEventHandler(adapter, handler); } private static void _adapter_RowUpdated(object sender, RowUpdatedEventArgs e) { App.DB.AddLog(e.Command); } ... AddEventHandler(_adapter, "RowUpdated", new EventHandler<RowUpdatedEventArgs>(_adapter_RowUpdated));
Mais le problème est que les évènements RowUpdated des différents providers ont TOUS un type de delegate différent :
- OracleRowUpdatedEventHandler
- OdbcRowUpdatedEventHandler
- SqlRowUpdatedEventHandler
etc...
Les classes *RowUpdatedEventArgs héritent toutes de RowUpdatedEventArgs, j'ai donc essayé de définir un handler avec un RowUpdatedEventArgs en paramètre, mais ça plante sur ev.AddEventHandler :
Ce qui, en fait, est assez logique, mais je ne vois pas comment je pourrais contourner ça... à moins de générer le code de mon handler dynamiquement, mais là ça devient de la haute voltigeImpossible de convertir l'objet de type 'System.EventHandler`1[System.Data.Common.RowUpdatedEventArgs]' en type 'System.Data.Odbc.OdbcRowUpdatedEventHandler'.
Quelqu'un aurait-il une idée qui me permettrait de gérer l'évènement RowUpdated sans connaître le type concret du DbDataAdapter ? Merci d'avance
Je sais pas si c'est très clair, donc n'hésitez pas à demander des précisions...![]()
Partager