2008-09-19 9 views
0

Je crée une classe générique de gestion/journalisation des erreurs pour nos applications. L'objectif est de consigner les informations d'exception, les informations sur la classe et la fonction (ainsi que les paramètres) et, le cas échéant, les informations sur l'objet System.Data.SqlClient.SqlCommand.Comment obtiendriez-vous les objets Sql Command pour un TableAdaptor donné et SqlDataAdaptor en C# (.NET 2.0)

Je voudrais être en mesure de gérer en passant SqlCommands, TableAdaptors, et SqlDataAdaptors. Je suis novice dans l'utilisation de la réflexion et je sais qu'il est possible de le faire, je ne suis pas sûr de savoir comment s'y prendre. S'il vous plaît donnez votre avis.

Répondre

0

Est-ce ce dont vous parlez?

SqlDataAdapter da = new SqlDataAdapter(); 
var cmd1 = ((IDbDataAdapter)da).DeleteCommand; 
var cmd2 = ((IDbDataAdapter)da).UpdateCommand; 
var cmd3 = ((IDbDataAdapter)da).SelectCommand; 
var cmd4 = ((IDbDataAdapter)da).InsertCommand; 

Le SqlDataAdapter implémente IDbDataAdapter, qui a getters/setters pour toutes les commandes CRUD. Le SqlDataAdapter les implémente explicitement, ils ne s'affichent donc pas dans la signature de la classe, à moins que vous ne les lanciez d'abord dans l'interface. Aucune réflexion nécessaire.

+0

Il existe une méthode similaire pour TableAdaptors des DataSets fortement typés? – CrashTECH

+0

Je suppose que c'est exactement la même chose, car ces adaptateurs de données fortement typés sont simplement des adaptateurs réguliers que VS a enveloppés (via un outil) à l'intérieur d'une classe de sécurité. Si l'encapsuleur de type ne s'étend pas à partir de IDbDataAdapter, vous devrez peut-être ajouter les méthodes manuellement pour accéder à l'adaptateur interne. – Will