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

Windows Forms Discussion :

Connexion à une base MySQL (MySql.Data.MySqlClient)?


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de Jayceblaster
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    420
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 420
    Points : 174
    Points
    174
    Par défaut Connexion à une base MySQL (MySql.Data.MySqlClient)?
    Bonjour..
    J'ai écris une classe permettant de me connecter à une base SQL.
    j'ai une fonction qui me permet de me connecter à la 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
     
            private MySqlConnection Connection = new MySqlConnection();
     
    ........
            public void connexion(string sChaineConnexion)
            {
                try
                {
                    /*connexion à la base de données*/
                    string ConnectionStr = String.Empty;
                    ConnectionStr = sChaineConnexion;
                    Connection.ConnectionString = ConnectionStr;
                    Connection.Open();
                }
                catch
                {
                }
            }
    et une fonction qui me permet d'exécuter des requêtes
    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
     
            public MySqlDataReader envoieRequete(string sRequete)
            {
                try
                {
                    /*récupération des données de la base pour affichage dans le DataSet*/
                    MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
                    MyAdapter.SelectCommand = new MySqlCommand(sRequete, Connection);
                    return MyAdapter.SelectCommand.ExecuteReader();
     
                }
                catch
                {
                }
     
                return null;
     
     
            }
    à la première exécution de envoieRequete tout fonctionne bien c'est à la deuxième exécution que ça plante avec le message suivant:
    "There is already an open DataReader associated with this Connection which must be closed first"..

    Quelqu'un peut il m'expliquer ma faute..
    merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2007
    Messages : 93
    Points : 56
    Points
    56
    Par défaut
    Salut,

    j'ai compris le message d'erreur, mais je ne vois pas ou elle est deja ouverte, je suis moi meme débutant.

    Ceci dit, j'ai réussis à faire une connection à une db suivis de quelque commande mysql.

    reportes toi à mon message pour une solution qui fonctionne:
    http://www.developpez.net/forums/sho...d.php?t=475117

    Meilleures salutation

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Jayceblaster Voir le message
    Bonjour..
    J'ai écris une classe permettant de me connecter à une base SQL.
    j'ai une fonction qui me permet de me connecter à la 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
     
            private MySqlConnection Connection = new MySqlConnection();
     
    ........
            public void connexion(string sChaineConnexion)
            {
                try
                {
                    /*connexion à la base de données*/
                    string ConnectionStr = String.Empty;
                    ConnectionStr = sChaineConnexion;
                    Connection.ConnectionString = ConnectionStr;
                    Connection.Open();
                }
                catch
                {
                }
            }
    et une fonction qui me permet d'exécuter des requêtes
    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
     
            public MySqlDataReader envoieRequete(string sRequete)
            {
                try
                {
                    /*récupération des données de la base pour affichage dans le DataSet*/
                    MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
                    MyAdapter.SelectCommand = new MySqlCommand(sRequete, Connection);
                    return MyAdapter.SelectCommand.ExecuteReader();
     
                }
                catch
                {
                }
     
                return null;
     
     
            }
    à la première exécution de envoieRequete tout fonctionne bien c'est à la deuxième exécution que ça plante avec le message suivant:
    "There is already an open DataReader associated with this Connection which must be closed first"..

    Quelqu'un peut il m'expliquer ma faute..
    merci
    Dans ta méthode envoieRequete, il ne faut pas que tu renvoie un MySqlDataReader. Le mieux est de renvoyer une liste d'objet personnalisée. Ce qui donnerait:

    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 List<MonObject> envoieRequete(string sRequete)
            {
                try
                {
                    /*récupération des données de la base pour affichage dans le DataSet*/
                    MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
                    MyAdapter.SelectCommand = new MySqlCommand(sRequete, Connection);
     
                    MySqlDataReader reader = MyAdapter.SelectCommand.ExecuteReader();
     
                 List<MonObject> list = new List<MonObject>();
     
                  while(reader.Read())
                  {
                          // Construit ta liste d'objet ici
                  }
     
                  reader.Close();
     
                 return list;
     
                }
                catch
                {
                }
     
                return null;
     
     
            }
    Le code n'est pas finit/optimisé mais c'est pour te montrer le principe

Discussions similaires

  1. [MySQL] Connexion à une base données mysql à distance
    Par jaljal dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/08/2009, 13h43
  2. Connexion à une base de données mysql via access
    Par eautret dans le forum Access
    Réponses: 2
    Dernier message: 07/04/2006, 10h02
  3. connexion à une base mysql wxdevcpp
    Par altadeos dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 06/04/2006, 09h34
  4. [BDD] Erreur dans la connexion à une base MySQL
    Par dodo10 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/01/2005, 19h52
  5. [JSP] Connexion à une base mysql
    Par Jovial dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 20/04/2004, 14h04

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