Utilisation d'un DataReader avec une Class

Messages postés
17
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
15 novembre 2011
- - Dernière réponse : yohan49
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
- 26 mars 2010 à 04:35
Bonjour à tous, voila mon problème

Je souhaite afficher dans une comboBox une liste de produit venant de ma base de données. Pour cela j'utilise un DataReader, rien de bien spécial. En programmation normal aucun soucis, mais là on m'impose d'utiliser une Class (mon dieu que je déteste ca ^^)

Voici mon code dans ma Class:

public bool bReader(string sCommand)
        {        
            try
            {
                m_sqlCommand = new SqlCeCommand(sCommand, m_sqlConnection);
                m_sqlReader = null;
                m_sqlReader = m_sqlCommand.ExecuteReader();;

                while (m_sqlReader.Read())
                {
                    m_sqlReader.ToString();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                m_sqlReader = null;
            }
        }


Le code dans mon programme:
bool bResultat;

                /*Selectionne les produits de notre base de données*/
                CLS_SqlCe CLS_SqlCecmd = new CLS_SqlCe();
                string sCommand = "SELECT Nom FROM PRODUIT";
                bResultat = CLS_SqlCecnx.bCommand(sCommand);
                MessageBox.Show(bResultat.ToString());

                bool bResult;

                /*Execute notre DataReader*/
                CLS_SqlCe CLS_SqlCeread = new CLS_SqlCe();
                bResult = CLS_SqlCeread.bReader(sCommand);
                comboBox1.Items.Add(????????????????); <- que faire?
                MessageBox.Show(bResult.ToString());


Ma connection à ma BDD, et mon SELECT fonctionne, mais je dois m'y prendre mal pour afficher mon SELECT dans ma comboBox, c'est très certainement stupide, mais ca me bloque totalement :s

D'avance merci pour vos réponses, cordialement =)
Afficher la suite 

4 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
24
0
Merci
Salut,

Ta méthode n'est pas bien construite.

public List<Sring > GetList (string sCommand)
{        
  try
  {
    List<String> result = new List<String>();
    m_sqlCommand = new SqlCeCommand(sCommand, m_sqlConnection);
    m_sqlReader = m_sqlCommand.ExecuteReader();;

    while (m_sqlReader.Read())
    {
         result.Add(m_sqlReader.ToString());
    }
    return result;
    }
  catch (Exception)
  {
     //Mettre un log
  }
  finally
  {
    m_sqlReader.Close();     
    m_sqlReader = null;
  }
}




Et l'utilisation

    List<String> resultat;
    resultat= CLS_SqlCeread.bReader(sCommand);
    foreach (String s in resultat)
    {
         comboBox1.Items.Add(s);
    }


nb : code fait de tête --> non testé.
Commenter la réponse de nhervagault
Messages postés
17
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
15 novembre 2011
1
0
Merci
Salut,

tout d'abord merci de prendre la peine de me répondre =)

Pourquoi l'utilisation d'un List<string> ici? ( je n'ai jamais utilisé cela, donc je ne sais pas trop a quoi ca sert enfaite ^^)

J'ai test tes propositions, le programme se lance correctement, mais lorsque j'arrive a l'exécution de mon Reader, j'ai l'erreur suivante: ExecuteReader: Connection property has not been initialized.

Indiquant la ligne:
m_sqlReader = m_sqlCommand.ExecuteReader();


Erreur que je n'avais pas auparavant.
Commenter la réponse de S1rK
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
24
0
Merci
J'ai rien changé dans la partie connection.
Et execution de la requete, c'est a dire que ton programme plantait avant.

m_sqlConnection n'a pas changé

    
    m_sqlCommand = new SqlCeCommand(sCommand, m_sqlConnection);
    m_sqlReader = m_sqlCommand.ExecuteReader();

--> c'est exactement ton code, j'ai enlevé la ligne avec le null qui ne sert à rien.


List<String> est pour simplifier une arraylist ou tu ne peux mettre que des String dedans
alors que l'arraylist tu mets des objets.
--> pas de cast --> plus rapide.

Bon dev
Commenter la réponse de nhervagault
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
0
Merci
public List<String>() GetList (string sCommand)

doit obligatoirement retourner une List<String>();

la la fonction ne retourne rien en cas d'erreur

voila quelque chose de valable !!

public List<Sring > GetList (string sCommand)
{        
   List<String> result = new List<String>();
   try
   {
    
      m_sqlCommand = new SqlCeCommand(sCommand, m_sqlConnection);
      m_sqlReader = m_sqlCommand.ExecuteReader();;

      while (m_sqlReader.Read())
      {
         result.Add(m_sqlReader.ToString());
      }
      return result;
   }
   catch (Exception)
   {
      //Mettre un log
   }
   finally
   {
       m_sqlReader.Close();     
       m_sqlReader = null;
   }
   return result;
}


d'ailleur visual studio doit te le signaler
Commenter la réponse de yohan49