C'est assez rare quand je dois utiliser ce type de classe mais ici cela m'arrangerais bien dans la librairie que je voudrais écrire.
Pour situer le problème, je voudrais écrire une librairie qui contient un objet connexion qui en fonction d'un paramètre attaque la bonne DB. Style si je lui dis de ce connecter à Access, ben ok et avec un autre objet du même type me vla partis sur Oracle.
Pour ce faire j'utilise la classe System.Data.Common.DbConnection que je dérive pour créer les différents constructeurs dont j'ai besoin.
Cette classe est une classe abstraire, donc je dois écrire le code toutes les fonctions et propriétés déclarées dans cette classe comme étant également abstraites.
Pour le constructeur cela me donne un truc du genre :
Ce qui m'a fois n'est pas bien compliqué. EmDbTypeConnection représentant une enum contenant les différents types de Db auquel je voudrais pouvoir me connecter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public EmDbConnection2(EmDbTypeConnection pTypeConnection, string sFilename) : base() { TypeConnection = pTypeConnection; if (TypeConnection == EmDbTypeConnection.DBACCESS || TypeConnection == EmDbTypeConnection.DBSQLITE) FileName = sFilename; }
ou j'ai un peu plus de mal à comprendre comment je pourrais m'en sortir malgré les différents tuto que j'ai parcouru, c'est dans ce cas ci :
J'obtiens une liste d'erreur du même type que celle ci, ce qui est normal vu que ce sont des membres déclarés comme abstract et donc que je suis cencé implémenter :
'EmData.EmDbConnection2' n'implémente pas le membre abstract hérité 'System.Data.Common.DbConnection.BeginDbTransaction(System.Data.IsolationLevel)' D:\Dropbox\Développements\EmData\EmDbConnection2.cs 20 18 EmData
Mon problème se situe donc à ce niveau ou je voudrais donc implémenté cette propriété:
Donc je me dis je vais utilisé le mot cle override et utilisé le mot clé base pour accédé à la propriété ConnectionString de la classe de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part public abstract string ConnectionString
Dans ce cas ci je ne vois pas la propriété ConnectionString dans la liste proposé par le mot clé "Base". Je me demande donc si je dois utiliser le mot clé "this" à sa place.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public override string ConnectionString { get { return base.ConnectionString; } }
J'ai déjà joué avec tout cela et je dois avoué qu'après 2 ou ans je patauge un peu au redémarrage.
La solution que j'ai trouvé" jusqu'a présent pour utiliser ma classe c'est un truc du style :
Donc en gros réécrire toute la classe en la surclassant, ce que je ne trouve pas trop propre.En sachant que j'ai également besoin des classes DbTransact, DbReader, DBadapter , etc ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Class Toto { DbConnection cmd = null; public void Open() { // Init de l'objet con avec les différents paramètres nécessaires // puis l'appel de la fonction membre de ma nouvelle classe : cmd .Open(); ... // Avec Try catch etc } }
Quelqu'un pourrait il rallumé ma lanterne SVP
Partager