Interface multi db

benbobo55 Messages postés 14 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 29 août 2005 - 4 août 2005 à 10:36
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 - 5 août 2005 à 16:43
Voilà mon probleme est que g pour le moment un prog tournant sous sql server, les commandes de connexion, query ... sont en dure dans le code.
Dans un premier temps, je dois develloper une interface independante pouvant travailler avec mysql et dans un future avec des bases de type : interbase, postgresql...
dois je obligatoirement changer les instructions de commande?
Comment puis je réaliser cela?

5 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
5 août 2005 à 08:45
Hello,

Ton problème est complexe, et demande plusieurs choses :

- Tout d'abord, la connection. En pricipe, la "ConnexionString" ne devrait pas être en dur dans le code, mais placé dans un fichier de config.

- Deuxièmement. Si tu passes de SQLServer à une autre base de donnée, tu auras des problèmes avec les DataAdapter, DbCommand, etc. Je pense que tu à utiliser les classes réservées à SQLServer (SqlDataAdapter, ...). Il y a à mon avis deux solutions :
- soit tu passes tout par ODBC, comme la quasi totalité des bases de données le supporte.
- soit tu utilise des interface (IDataAdapter, ...) et tu fait du late binding pour créer un objet de la bonne classe (qui sera aussi définie dans le fichier de config). C'est un peu plus compliquer, mais peut-être un peu plus efficace qu'ODBC.

Amicalement, SharpMao
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
5 août 2005 à 09:51
comme SharpMAO, je te conseille l'implémentation des Interfaces IDb... C'est un peu obscurt au début, mais l'avantage c'est que tu peux greffer n'importe quelle BdD dessus.

Sinon, autre alternative, le DataAcess Application Block : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
5 août 2005 à 09:52
pour plus d'infos sur les applications blocks : http://www.dotnet-tech.com/tutoriels/application-blocks/

<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
benbobo55 Messages postés 14 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 29 août 2005
5 août 2005 à 15:38
Merci pour vos conseils!!

Dans mon interface, ayant utiliser une api (dll) pour slqserver, la system.data.sqlclient de dot.net, g cherché après une dll pour dans un premier temps mysql. je l'ai trouvé et elle est exactement la meme dans ca construction que celle de sqlserver!!

comme je l'ai dit, je dois me focaliser sur Mysql, je ne fais que des connexion, update, select, drop, insert, create.

Ma question est : que doit contenir dans un premier lieu mon interface en terme de methode?

A oui, question a Sharpmoa, qu'entend tu par "late binding" ?

Si vous avez des questions!!
0

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

Posez votre question
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
5 août 2005 à 16:43
Hello,

Le late binding permet d'instancier un objet sans connaître précisément son type à la compilation. Ca peut servir dans ton cas. Je m'explique :

Tu as dans le fichier de config le nom de l'assembly (dll) pour la base de données, ainsi que les noms des classes à utiliser (DataAdapter, DbCommand, DbConnection, ...).

Tu charge la librairie :

System.Reflection.Assembly TheAssembly = System.Reflection.Assembly.Load(NomDeLassembly);
Tu peux ensuite créer un objet de la classe que tu veux :
IDbConnection dc = (IDbConnection )TheAssembly.CreateInstance(NomDeLaClasse);

dc.ConnectionString = TheConnectionString;
dc.Connect();

Après, tu peux continuer, qu'elle que soit la base de données de l'autre côté

Amicalement, SharpMao
0
Rejoignez-nous