IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[c# 2.0]comment changer de db facilement ?!


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 164
    Par défaut [c# 2.0]comment changer de db facilement ?!
    Bonjour,

    J'ai un projet fait via dotnet 2.0 et visual studio 2005 qui attaque une db sql serveur !
    c'est un programme tout ce qu'il y'a de plus simple (insert, upate, delete)

    une classe a ete developpe pour gerer tout ce qui est connection a la db sql serveur, execution des stored procedure , etc ...

    ma question est celle ci, imaginons (car ce n'est pas le cas pour le moment) que l'on doit changer de db pour une raison de performance ou de prix par exemple =>et passer a mysql !


    cela impliquerait que je crrer une classe pour mysql sur le modele de celle de sql serveur .
    Mais dans mon code code de l'application comment savoir lors du form load (par exemple) comment faire pour switcher de l'une a l'autre db tres facilement !?

    avez vous des experiences ou des conseils a me donner par rapport a cela ?!

    Je vous remercie
    Christophe

  2. #2
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Les procédures de connexions sont différentes en fonction des BDD (Access, sql, MySql...).

    Crée une classe pour chacune des BDD que tu penses utiliser. Ensuite dans ton application, tu mets une combobox et tu choisis la base de donnée utilisée actuellement et tu appliques le code en conséquence (dans un select case).

    ++
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Aspic
    Les procédures de connexions sont différentes en fonction des BDD (Access, sql, MySql...).

    Crée une classe pour chacune des BDD que tu penses utiliser. Ensuite dans ton application, tu mets une combobox et tu choisis la base de donnée utilisée actuellement et tu appliques le code en conséquence (dans un select case).

    ++
    Surement pas !
    Une classe bien écrite utilisant des interfaces remplace toute ton usine à gaz.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par SaumonAgile
    Surement pas !
    Une classe bien écrite utilisant des interfaces remplace toute ton usine à gaz.
    Sans doute je ne suis pas expert en BDD mais en tout cas les chaines de connexion sont différentes !

    EDIT : Je vois la chose comme ca mais c'est sur que je ne programme pas beaucoup avec des BDD. Mais s'il est possible de tout faire en une classe, qu'il n'hesite pas
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Aspic
    Sans doute je ne suis pas expert en BDD mais en tout cas les chaines de connexion sont différentes !
    Ben oui exactement ! et tu veux lui faire écrire des classes différentes alors qu'il suffit de simplement changer une chaine et un constructeur !

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    /// <summary>
    /// Creates the connection for the specified database.
    /// </summary>
    /// <param name="database">The database.</param>
    /// <returns></returns>
    public IDbConnection CreateConnection(ConnectionType database)
    {
         IDbConnection connection = null;
     
         if (database.ToString().StartsWith("sql", StringComparison.InvariantCultureIgnoreCase))
              connection = new SqlConnection();
         else
              connection = new OracleConnection();
     
         connection.ConnectionString = ConnectionString.Translate(database);
     
         return connection;
    }
     
    internal static string Translate(ConnectionType database)
    {
         switch (database)
         {
              case ConnectionType.Oracle : return "...";
              case ConnectionType.SqlServer : return "...";
              default: return String.Empty;
         }
    }
    Ensuite pour créer une commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IDbConnection connec = ConnectionFactory.CreateConnection(ConnectionType.Oracle);
    IDbCommand comm = connec.CreateCommand();
    comm.CommandText = "SELECT ...";
    IDataReader reader = comm.ExecuteReader();
    Et si tu ne gères qu'une seule base, tu supprimes la gestion multibase (les paramètres de type ConnectionType), pour donner quelquechose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public IDbConnection CreateConnection()
    {
        return new SqlConnection("machainedeconnexion");
        // Ou bien : return new OracleConnection("machainedeconnexion");
    }
    Ainsi le jour où tu changes de base, tu n'as qu'à changer cette unique ligne !
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Bah non !

    Seulement les chaines changent mais pas les requetes ! Donc oui ton code est parfait et je m'etais mal exprimé
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 324
    Par défaut
    Citation Envoyé par SaumonAgile
    Ben oui exactement ! et tu veux lui faire écrire des classes différentes alors qu'il suffit de simplement changer une chaine et un constructeur !
    Question de gout et de complexité, tantot la solution comme toi avec un switch/case peut parraitre satisfaisant, tantot une conception objet plus poussé avec par ex une classe abtraite où sont definis tous les elemens commun, puis des classes enfants où sont redefinis les parametres specifiques devient plus facile à lire/maintenir.

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    En utilisant les interfaces IDbCommand, IDbConnection, etc ça te permet de découpler complètement ton code de ta base de données.
    Idéalement en utilisant les méthode CreateCommand, CreateParameter, etc définies dans ces interfaces, tu n'as besoin que d'utiliser des SqlConnection ou OracleConnection juste au moment de créer la connexion.
    En créant un factory de connexion, qui te renvoie des IDbConnection, tu peux rendre ton code complètement indépendant de la base de données sous-jacente.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

Discussions similaires

  1. [C#] Comment changer dans une chaine
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 13/05/2004, 13h17
  2. Comment changer l'heure système ?
    Par Lung dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/04/2004, 10h24
  3. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42
  4. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo