Ingénierie logiciel: support de 2 BDD

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 6 mai 2008 à 23:26
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 8 mai 2008 à 02:25
Bonjour,

Mon programme utilise en ce moment SQL Compact Server, mais j'aimerai que l'utilisateur puisse aussi choisir Postgres.

Quelle est la façon la plus "jolie" pour qu'un programme supporte les 2 bdd?

Mon idée est de créer une interface pour chaque object clé d'une bdd, ie:

par exemple:
Interface ISqlConnection
   implémenté: class SqlCompactConnection / SqlPostgresConnection
Interface ISqlCommand
   implémenté pour les 2 aussi.
Interface ISqlParameter
Interface ISqlResultSet
etc. etc.

Ensuite, chaque interface implémentée ne serait qu'une façade des classes existantes (SqlCe**** pour Compact SQL, Npgsql**** pour Postgres). Tout cela m'a l'air ok, mais je butte sur:

Si je créé une connection pour SQL Compact Server, comment faire pour que tous les autres objets base de données (command, parameter, resultset) soient aussi de type SQL Compact Server?
Comment traiter de façon astucieuse les différences de langage SQL ?

Merci!

5 réponses

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
6 mai 2008 à 23:47
Par differences, j'entends par exemple, j'ai des requetes types:

CONVERT(colonne, NUMERIC(18,2)) par exemple en SQL Compact server, ou:
SUM(CONVERT(colonnedetypebit, INT)) pour sommer des booleans...
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 mai 2008 à 09:03
Déjà, si tu utilises le framework .net 2.0 (ou plus), à la place des interfaces, je te conseille d'utiliser la factory DbProviderFactory... et ainsi DbCommand, DbConnection...

Ensuite ne ce qui concerne les requêtes... il n'y a pas vraiment de solution : soit tu fais le plus générique possible avec des requêtes classiques... soit tu fais des procédures stockées.

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
7 mai 2008 à 17:40
Je ne connaissais pas ce truc DbProviderFactory... ca a l'air sympa mais je crois que je vais me lancer dans un design pattern factory avec mon interface + façade, au moins j'aurais le controle total sur ce que je fais.
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
7 mai 2008 à 21:05
C'est dommage de réinventer la roue... surtout que ce genre de problèmatique est quand même relativement récurrente et que les solutions existent (comme celle citée par sebmafate, ou encore l'application block dédié a la couche d'accès aux données - qui doit même être dans Enterprise Librairie il me semble)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
8 mai 2008 à 02:25
Bein d'apres la doc DbProvider créé des objets de type odbc, oledb, sqlclient et oracle. Plutot que de dériver DbProvider pour y mettre SqlCe et Npgsql avec 90% de trucs qui ne serviront pas, autant créer sa propre factory non?http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oraclecommand.aspx
0
Rejoignez-nous