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 :

Sql Serveur et Mysql [Fait]


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 55
    Points
    55
    Par défaut Sql Serveur et Mysql
    Salut tout le monde,

    Mon projet gère les connexions à une base de données en SQL Server 2005, mais maintenant on me demande de gérer une base Myql...

    J'arrive bien à me connecter aux deux et à lire/écrire dedans, pour ça no problème. Le problème viens du fait que je suis soit sur une base soit sur l'autre. Ca dépendra de l'utilisateur finale.
    Dois je refaire toutes mes requetes SQL Server en Mysql, ou y a t'il un moyen de faire à de manière moins longue? (ya bien 200a requetes...).

    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
    30
    31
     
    SqlCommand command = new SqlCommand("", connection);
                MySqlCommand command2 = new MySqlCommand("", conn);
                label62.Text = sourcename;
     
                //Test pour savoir si la base existe
                try
                {
                    if (SGBD == "Mysql")
                    {
                        conn.ChangeDatabase("Simulateur");
                    }
                    else
                    {
                        connection.ChangeDatabase("Simulateur");
                    }
                }
    {
                    ///****************************************************************//
                    // Création de la table automate//
                    // requete type pour créer une base //
                    if (SGBD == "Mysql")
                    {
                        command2.CommandText = "CREATE DATABASE Simulateur";
                        command2.ExecuteNonQuery();
                    }
                    else
                    {
                        command.CommandText = "CREATE DATABASE Simulateur";
                        command.ExecuteNonQuery();
                    }
    P.S : Et scusez moi si je pose trop de question 'bête' mais je suis un stagiaire débutant totale en C# qui dois faire un logiciel complet....

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 159
    Points : 25 079
    Points
    25 079
    Par défaut
    si les requetes ont le meme texte dans tous les cas, il est possible de factoriser le code d'accès et d'envoyer juste la requete as string à une procédure et d'avoir un paramètre dans ton appli qui dit sur quelle base tu es

    il est possible d'instancier donc soit un SqlCommand soit un MySqlCommand
    et le traiter as DBCommand ensuite, en théorie les 2 hérite de ce dernier
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Tu es chanceux, Microsoft a travaillé pour toi

    Jette un oeil à la classe DbProviderFactory et particulièrement à la méthode GetFactory(). En lui passant en paramètre le type de base que tu as choisi, elle te retourne un DbProviderFactory qui correspond à ta base.
    Ce DbProviderFactory est une factory classique qui a des méthodes statiques CreateCommand, CreateConnection, CreateParameter...
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  4. #4
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Une p'tite remarque:

    Si tu as beaucoup de code SQL à gérer, ou du code de création genre CREATE DATABASE, CREATE TABLE, CREATE INDEX... je te conseille de le mettre à part dans un fichier texte (extension .sql).
    Tu pourras ainsi soit l'exécuter directement sur ton SGDB, soit le charger dans ton programme C# pour l'exécuter (avec un TextReader, par exemple), mais au moins il sera indépendant de ton programme, et tu n'auras pas à recompiler ton exe si une ligne de SQL doit changer.
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 55
    Points
    55
    Par défaut
    Merci pour vos infos même si je n'ai pas tout compris ^^, j'ai trouvé un tuto qui a l'air assez complet :
    http://johannblais.developpez.com/tu...acces-donnees/

    Z'en pensez quoi?

  6. #6
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Clydopathe Voir le message
    Merci pour vos infos même si je n'ai pas tout compris ^^, j'ai trouvé un tuto qui a l'air assez complet :
    http://johannblais.developpez.com/tu...acces-donnees/

    Z'en pensez quoi?
    Le tuto "Bonnes pratiques pour les accès aux données" de saumonagile ? c'est du bon
    N'oubliez pas le tag et

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 55
    Points
    55
    Par défaut
    C'est surement du bon mais pour un total noob comme moi , c'est pas facile du tout, mais je pense avoir compris le principe.

    Enfin je pense....

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 55
    Points
    55
    Par défaut
    J'ai cru avoir trouvé une solution , l'avantage de mon projet est que je sais avec exactitude sur quelle base je vais travailler.
    -SqlServer
    -MySql

    J'ai crée une classe Bdonnée, et dedans j'ai mis mes fonction de lecture écriture de données.

    Ici se trouve le choix de la connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IDbConnection connect = null; //Création de la variable générale de connexion 
    IDbCommand comm = null; //Création de la commande générale
    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
     
    if (Nbase == "Sqlserveur")
                    {
                        sourcename = System.Environment.MachineName; sourcename += "\\SQLEXPRESS";//nom par defaut du server
                        connect = null;
                        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder("server=" + sourcename + "; Integrated Security=SSPI;");
                        connect = new SqlConnection(builder.ConnectionString);
                        connect.Open();
                    }
                    else if (Nbase == "Mysql")
                    {   
                        sourcename = "LocalHost";
                        string strConn = String.Format("server=localhost;user id=root; password=test; database=Mysql; pooling=false");
                        //Definition de la connexioon
                        connect = new MySqlConnection();
                        connect.ConnectionString = strConn;
                        //Ouverture de la connexion sur la base
                        connect.Open();                 
                    }

    et là l'écriture des infos générales:

    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
     
    try
                {                              
                        connect.ChangeDatabase(database);      
                }
                //Si on n'arrive pas à se connecter alors on crée une nouvelle base
                catch
                {
     
                    // Création de la table automate//
                    // requete type pour créer une base //
                    Sqlwrite("CREATE DATABASE Simulateur");
     
     
                    //On change la cible pour tout créer
                    connect.ChangeDatabase("Simulateur");
     
                        //requete type pour créer une table //
                        //table Automate
                 }
    Désolé pour la longueur du post ou si c'est mal expliqué.

    Bon ben en fait ca marche pas, j'ai comme qui dirais vendu la peau de l'ours avant de l'avoir tué....
    Quand j'arrive sur le SqlWrite j'ai ce joli message:

    System.NullreferenceException :La référence d'objet n'est pas définie à une instance d'un objet.

    Je vois pas d'ou ca peux venir, une idée peut etre?

  9. #9
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par Clydopathe Voir le message
    Bon ben en fait ca marche pas, j'ai comme qui dirais vendu la peau de l'ours avant de l'avoir tué....
    Quand j'arrive sur le SqlWrite j'ai ce joli message:

    System.NullreferenceException :La référence d'objet n'est pas définie à une instance d'un objet.
    Y'a quoi dans ta fonction Sqlwrite() ?
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 55
    Points
    55
    Par défaut
    Il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try
                {
     
                    comm.CommandText = write;
                    comm.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                   MessageBox.Show(ex.ToString());
                }

  11. #11
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Ben c'est normal.

    comm est null, donc tu te prends une System.NullreferenceException lorsque tu essaie de t'en servir.
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 55
    Points
    55
    Par défaut
    Bon ben en fait j'ai trouvé une réponse et en plus ca marche, je m'explique, comme je suis débutant à chaque requete je faisais:

    Pour écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    command.commandtext = ("marequete");
    command.executenonquery();
    Pour lire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sqldatareader reader = null
    reader.commandtext = ("marequete");
    While(reader.read())
    {
    //Je traite les résultats.
    }
    reader.close();
    Mais ca alourdissait le code et grâce a ce forum et à un maitre de stage patient(sisi je vous jure ça existe ). J'ai crée une classe Bdonnée qui gère tout mes accès aux bases de données. Et dans cette base j'ai ça:

    POur me connecter à une base;

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    class BDonnée
        {
     
            public string Nbase = "";
            SqlConnection conexsql = null;
            MySqlConnection conexmysql = null;
     
            //Connection à la base de donnée
            public void SqlConnect(string NomBase)
            {
                string sourcename = "";
                Nbase = NomBase;
                try 
                {
     
                    if (Nbase == "Sqlserveur")
                    {
                        sourcename = System.Environment.MachineName; sourcename += "\\SQLEXPRESS";//nom par defaut du server
                        conexsql = null;
                        SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder("server=" + sourcename + "; Integrated Security=SSPI;");
                        conexsql = new SqlConnection(builder.ConnectionString);
                        conexsql.Open();
                       // IDbCommand comm = as SqlCommand();                  
                    }
                    else if (Nbase == "Mysql")
                    {   
                        sourcename = "LocalHost";
                        string strConn = String.Format("server=localhost;user id=root; password=test; database=Mysql; pooling=false");
                        //Definition de la connexioon
                        conexmysql = new MySqlConnection();
                        conexmysql.ConnectionString = strConn;
                        conexmysql.Open();
     
                    }
     
                }
                catch (Exception ex) //traite l'erreur de connexion au serveur SQL express
                {
                    if (Nbase == "Sqlserveur")
                    {
                        string message = "SERVER NOT FOUND= "; message += sourcename; message += "   ERROR=";
                        message += ex.Message;
                        MessageBox.Show(message);
                        return;
                    }
                    else if (Nbase == "Mysql")
                    {
                        MessageBox.Show("Impossible de se connecter au serveur Mysql, verifiez les paraètres Mysql");
                        return;
                    }
                }
            }
    Puis j'ai créer plusieurs fonctions dont une qui choisies automatiquement la base sur laquelle je travaille:


    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
    30
    31
     
    public string[] Sqlchoose(string param)
            {
            //On définit le tableau
            string[] tab = null;
                if (Nbase == "Mysql")
                {
                    tab = SqlreadMy(param); //Notre tableau est égale à la reponse de la fonction
     
                }
                else if (Nbase == "Sqlserveur")
                {
                    tab = Sqlread(param);
     
                }
            return tab; //On renvoie la valeur demandée.
            }
     
            public void SdlchooseWrite(string param)
            {
                if (Nbase == "Mysql")
                {
                  SqlwriteMy(param); //Notre tableau est égale à la reponse de la fonction
     
                }
                else if (Nbase == "Sqlserveur")
                {
                  Sqlwrite(param);
                }
     
            }
    Ensuite chacune de ses fonctions appellent la fonction dont on n'a besoin, en récupère les résultats et les renvoie a ma form1.

    Je suis assez content car j'ai galeré pour en arriver là, plus tard j'essayerais de faire des requetes paramétrées comme dans le tutorial que j'ai trouvé.

    Enfin tout ça pour vous dire merci de votre aide et de votre patience.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir une base de données SQL Serveur en MySql
    Par sheira dans le forum Débuter
    Réponses: 8
    Dernier message: 03/07/2015, 16h16
  2. Réponses: 6
    Dernier message: 06/06/2012, 16h31
  3. Serveur lié Sql serveur vers Mysql
    Par smain_inf dans le forum Administration
    Réponses: 9
    Dernier message: 16/07/2008, 15h22
  4. Différence entre MySql et sql serveur
    Par nina_2006 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 30/10/2006, 16h12
  5. de Mysql à sql serveur
    Par zola dans le forum JDBC
    Réponses: 3
    Dernier message: 08/11/2004, 18h02

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