Utilisation d'un DataReader avec une Class

S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 - 24 mars 2010 à 09:59
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 =)

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
24 mars 2010 à 12:07
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é.
0
S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 4
24 mars 2010 à 14:59
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.
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
24 mars 2010 à 20:01
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
0
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 8
26 mars 2010 à 04:35
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
0
Rejoignez-nous