Partage
  • Partager sur Facebook
  • Partager sur Twitter

selection des données

DataReader ouverte sur cette connxion

    24 décembre 2019 à 9:28:13

    bonjour à tous !

    je suis un débutant, je bosse sur un projet dans lequel j'ai besoin de selectionner les données d'une source des données MYSQL mais j'ai un problème.

    on m'aafiche le message suivant "there is an open datareader associated  with this connection must be close first" et
    pourtant je n'ai pas ouvert deux datareader mais au contraire un datareader mais avec appel d'une fonction qui utilise la methode ExecuteScalar() sur l'objet Command

     voici mon code

      private bool frais_deja_paye(string mois,string id)
            {
    
                 string SQL = "select count(id) from payer where designation='"+mois+"' and IDeleve='" + id + "'";
                 MySqlCommand cmd = new MySqlCommand(SQL, Connexion.con);
               
                try
                {
                    int i = 0;
    
                    i = Int32.Parse(cmd.ExecuteScalar().ToString());
                 
                    if (i != 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show(ex.Message);
                    return false;
                }

    appel de la fonction

      //la méthode qui permet d'afficher tous les paeiment
            private void afficher()
            {
                string sql = "select id, nom,postnom from eleve where classe='" + cbx_classe.Text + "'  order by (nom) asc";
                MySqlCommand cmd = new MySqlCommand(sql, Connexion.con);
                MySqlDataReader dr= null;
                dgvEleve.Rows.Clear();
    
                try
                {
                    dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        //les variables relatives aux frais;
                        string ID_eleve = dr.GetValue(0).ToString(); //selection de l'ID de l'eleve;
                        string[] tableau_frais = { "non", "non", "non", "non", "non", "non", "non", "non", "non", "non", "non", "non", "non" };
    
                        MessageBox.Show(ID_eleve);
    
        
    
                        //si il a déja payé l'inscription
                        if(frais_deja_paye("inscription",ID_eleve))
                        {
                            tableau_frais[0] = "oui";
                        }
    
    
                       //si il a déja payé le mois de septembre
                        if (frais_deja_paye("septembre", ID_eleve))
                        {
                            tableau_frais[1] = "oui";
                        }
    
                        //si il a déja payé le mois d'octobre
                        if (frais_deja_paye("octobre", ID_eleve))
                        {
                            tableau_frais[2] = "oui";
                        }
    
                        //si il a déja payé le mois de novembre
                        if (frais_deja_paye("novembre", ID_eleve))
                        {
                            tableau_frais[3] = "oui";
                        }
    
                        //si il a déja payé le mois de décembre
                        if (frais_deja_paye("décembre", ID_eleve))
                        {
                            tableau_frais[4] = "oui";
                        }
    
                        //si il a déja payé le mois de janvier
                        if (frais_deja_paye("janvier", ID_eleve))
                        {
                            tableau_frais[5] = "oui";
                        }
    
                        //si il a déja payé le mois de février
                        if (frais_deja_paye("février", ID_eleve))
                        {
                            tableau_frais[6] = "oui";
                        }
    
                        //si il a déja payé le mois de mars
                        if (frais_deja_paye("mars", ID_eleve))
                        {
                            tableau_frais[7] = "oui";
                        }
    
                        //si il a déja payé le mois d'avril
                        if (frais_deja_paye("avril", ID_eleve))
                        {
                            tableau_frais[8] = "oui";
                        }
    
                        //si il a déja payé le mois de mai
                        if (frais_deja_paye("mai", ID_eleve))
                        {
                            tableau_frais[9] = "oui";
                        }
    
                        //si il a déja payé le mois de juin
                        if (frais_deja_paye("juin", ID_eleve))
                        {
                            tableau_frais[10] = "oui";
                        }
    
                 
                        
                        //ajout des élement pour chaque eleve
                        dgvEleve.Rows.Add(dr.GetValue(0), dr.GetValue(1), dr.GetValue(2),tableau_frais[0]);
                        
                    }
    
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    dr.Close();
                }
    
            }

    merci d'avance



    • Partager sur Facebook
    • Partager sur Twitter

    fais du bien à tous, du mal à personne !!

      31 décembre 2019 à 22:40:43

      Je refais mon laïus habituel, les "DataReader", c'est caca.

      Vous n'avez pas compris comment fonctionne le garbage collector .NET, ni comment utiliser correctement le pooling de connexion de .NET, ni l'usage du "using(...){...}".

      Vous prenez pas la tête avec ces antiquités et utilisez des DataSet/DataAdapter et utilisez correctement "using(...){...}".

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        20 janvier 2020 à 7:46:16

        merci bacelar.
        • Partager sur Facebook
        • Partager sur Twitter

        fais du bien à tous, du mal à personne !!

        selection des données

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown