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 :

Problème requete mysql


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut Problème requete mysql
    Bonjour,

    Je fais un petit soft avec lequel je dois récupérer des infos via une bdd mysql.
    voici le bout de code qui s'y rapporte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string qry = "SELECT chatRoom FROM roomChecked WHERE userName ='adm-openfire';";
                MySqlConnection conDataBase = new MySqlConnection(strdb);
                MySqlCommand commande = conDataBase.CreateCommand();
                MySqlDataReader myReaders;
     
                conDataBase.Open();
                commande.CommandText = qry;
     
                myReaders = commande.ExecuteReader();
                MessageBox.Show(myReaders.FieldCount.ToString());
    j'ai 3 lignes actuellement dans ma bdd au nom de 'adm-openfire'.
    La messagebox devrait me renvoyer "4" , mais là elle me renvoie "1" comme si la requete était vide.
    Quand j'essaye cette même requete directement dans Mysql, elle fonctionne correctement..
    Une idée pour résoudre le pb ?
    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Bonjour,

    Le problème ne vient pas de la requête mais de ton utilisation de DataReader.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    myReaders = commande.ExecuteReader();
    if (myReaders.HasRows == true)
    {
       while (myReaders.Read())
      {
         MessageBox.Show(myReaders["chatRoom"].ToString());
      }
    }

    FiledCount te permet de connaître le nombre de colonne sur la ligne actuel, tu fais un select sur un champ, tu as donc une colonne.

    A+

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    D'accord, merci.
    Du coup FieldCount ne me renvoie pas le nombre de ligne trouvé par la requete ?
    Y a t'il une commande pour cela ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Non il n'y a pas de commande.

    Tu as plusieurs options :

    - Soit tu fais un select count
    - Tu mets un compteur dans la boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int MyCompt = 0;
    while (myReaders.Read())
    {
     MyCompt ++;
    }
    - Tu fais une relation avec un DataTable()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (DataTable dt = new DataTable())
     {
      dt.Load(myReaders);
      Console.WriteLine(dt.Rows.Count);
    }
    Je ne te conseille pas la dernière solution, mais comme ca tu peux faire ton choix.

    A+

  5. #5
    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
    D'abord un premier point:
    Il faut éviter les requêtes du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string qry = "SELECT chatRoom FROM roomChecked WHERE userName ='adm-openfire';";
    comme tu l'as fait. Préférez à la place les requêtes paramétrées qui offrent pleins d'avantages: protection contre les injections sql, gestion du format des dates etc.

    Pour en revenir à ton problème: si c'est uniquement le nombre de ligne retourné par la requête que tu souhaites afficher, utilise alors ExecuteScalar:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MySqlCommand commande = new MySqlCommand("SELECT chatRoom FROM roomChecked WHERE userName =@ParamUserName", conDataBase);
    commande .Parameters.AddWithValue("@ParamUserName", 'adm-openfire');
    int lignesRetournees= Convert.ToInt32(commande.ExecuteScalar());

    Le datareader renvoie en fait un flux de données. Il est donc impossible de connaitre à l'avance le nombre de recordset à renvoyer. Tu peux donc utiliser dans ce cas une des méthodes préconisées par egautier18.

    Mais tu as aussi la possibilité de jouer sur la propriété HasRows qui retourne un booléen te permettant de savoir si le flux contient des données ou pas.
    N'oubliez pas le tag et

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Merci callo pour l'info concernant les requetes paramétrés, mais pour l'instant je n'en suis qu'au test donc ça ne me gêne pas.
    Je réglerai ce point avant de mettre mon soft en prod .

    Merci pour vos infos, je vais essayer tous ça !

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

Discussions similaires

  1. Problème requete MySql
    Par walid kh dans le forum VB.NET
    Réponses: 3
    Dernier message: 12/04/2010, 16h20
  2. [MySQL] Problème requete MYSQL
    Par mikael2235 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/08/2009, 19h23
  3. Problême requete MySql avec Borland 6 c++
    Par Nissartis06 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/03/2007, 18h25
  4. [requete] Mysql problème de clause where
    Par Raideman dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/07/2005, 18h00
  5. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36

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