Recuperer le resultat d'une select en c#

Résolu
cs_baby85 Messages postés 79 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 17 juin 2009 - 1 avril 2009 à 20:21
aminescm Messages postés 7 Date d'inscription mercredi 19 octobre 2011 Statut Membre Dernière intervention 9 mai 2012 - 3 mars 2012 à 02:00
salut,
j ai un  probleme lorsque je veux recuperer le resultat d'une requete select en c# mais quand je veux utiliser le resultat de select dans une autre methode il affiche une message d'erreur
j ai fais comme ca
            string nz = equi.zoneChangement();//cette methode retourne le resultat d'une select de type string
            double dsz = equi.selection(nz);//cette methode a pour variable d'entrée string
il affiche une message d'erreur

Le format de la chaîne d'entrée est incorrect au  niveau de cette methde selection sachant lorsque j 'execute la methde avec une chaine de caratere il affiche le resultat vrai
public string zoneChangement()
{            string requete1 = "select distinct(Num) from table where Num !='"+0+"' ";
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand oCommand = new SqlCommand(requete1, connection);
            connection.Open();
            int h = 0;
            SqlDataReader reader1 = oCommand.ExecuteReader();
            while (reader1.Read())
            {
                string result1 = reader1["Num"].ToString();
                string res1_doub = Convert.ToString(result1);
                tabnum[h] = res1_doub;
                h++;
            }
return(tabnum[3]);
 }
le type de colonne dans la base des données est char[10]
Merci d'avance
A voir également:

4 réponses

cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
1 avril 2009 à 22:25
je comprend pas trop ou tu veux en venir ici :
                string result1 = reader1["Num"].ToString();
                string res1_doub = Convert.ToString(result1);
                tabnum[h] = res1_doub;
je vois pas la déclaration de tabnum;

que ce passe t'il si la requette renvoi moins de 4 éléments?

Pourquoi demander touts les résultat puis n'en renvoyer qu'un seul, la requette devrait te sortir dirrectement le quatriéme si c'est bien ce que tu veux, imagine que la table contienne 3 000 000 de "Num" !!!

As-tu vérifier que la valeur dans nz est bien conforme a ton attenteaprés l'appel à la fonction zoneChangement()?

Est tu certain de ta requette ?
"select distinct(Num) from table where Num !='"+0+"' " 
là tu additionne des choux et des carote (string et int) au pire :
"select distinct(Num) from table where Num !='"+(0).ToString()+"' "
le 0 étant codé de maniére fixe pouquoi ne pas écrire :
"select distinct(Num) from table where Num !='0' "
ou le cas échéant, utilise une requette paramétré :
"select distinct(Num) from table where Num [mailto:!=@p1 !=@p1] "
Est tu bien sur de l'utilisation de != pour "différent" de ne serais pas plutot <> ?

Utilise des clauses using pour proprement détacher les resources

ceci est déjà un peut plus propre (et pas sufisant hein...) :

public string zoneChangement()
{
   string requete1 = "select distinct(Num) from table where Num <>'0' ";
   using(SqlConnection connection = new SqlConnection(connectionString))
   {
      connection.Open();
      using(SqlCommand oCommand = new SqlCommand(requete1, connection))
      {
         int h = 0;
         using(SqlDataReader reader1 = oCommand.ExecuteReader())
         {
            while (reader1.Read())
            {
               if(h==3)return reader1.GetString(0);
               h++;
            }
            throw new Exception("élément inexistant !!!"); // pour débuguer
            //return string.Empty; // ou null comme tu veux
         }
      }
   }
}

As-tu pensez à le faire du LinqToSql?
1
cs_baby85 Messages postés 79 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
1 avril 2009 à 22:51
bonsoir,
merci bien pour votre réponse Malkuth
ca etait bien marché
0
omyoussef Messages postés 25 Date d'inscription mardi 6 juillet 2010 Statut Membre Dernière intervention 18 mars 2013 1
8 juil. 2011 à 12:17
Salut,
j'ai un problème lorsque je veux afficher le résultat d'une requête sur une listbox, lors d'un clic sur un bouton.
Ma requête doit fournir les champs d'une table ayant une clé primaire égale à la valeur contenue dans un textbox.

Voici mon code;
private void button4_Click(object sender, EventArgs e)
{ SqlConnection myConnection = new SqlConnection (
"server=SWEET-B0260DB61\\SQLEXPRESS;" +
"Trusted_connection=yes;"+
"database=gestion production;"+
"Connection timeout=100");
SqlDataReader reader = null;
try
{
myConnection.Open();
SqlCommand command = new SqlCommand("SELECT code_MP,cout_unité FROM m_p where (code_article like @cod_ar) )", myConnection);
command.Connection = myConnection;

command.Parameters.Add(new SqlParameter("@cod_ar", System.Data.SqlDbType.NVarChar, 20, "code_article"));
command.Parameters["@cod_ar"].Value = textBox1.Text;

reader = command.ExecuteReader();
listBox1.Items.Clear();
while (reader.Read())
{
listBox1.Items.Add(reader["code_MP"].ToString() + " " + reader["cout_unité"].ToString());

}
}
catch (Exception z)
{
MessageBox.Show(z.ToString());
}
finally
{ if (reader!=null)
reader.Close();
if ( myConnection.State==ConnectionState.Open)
myConnection.Close();
}

}

je n'arrive pas avoir l'affichage et l'erreur indique " incorrect syntax near ')'et la ligne de l'erreur est: reader = command.ExecuteReader();

j'espere etre claire pour que vous puissiez m'aidé
merci d'avance :)
0
aminescm Messages postés 7 Date d'inscription mercredi 19 octobre 2011 Statut Membre Dernière intervention 9 mai 2012 2
3 mars 2012 à 02:00
voila un exemple , il peut vous aider :


private void button2_Click(object sender, EventArgs e)
{

SqlConnection Connecter = new SqlConnection();
Connecter.ConnectionString = "data source=PC-PC ;DATABASE=amine ;Integrated Security=True;";
Connecter.Open();



SqlCommand Sql = new SqlCommand("select * from login ", Connecter);

SqlDataReader dr;
dr = Sql.ExecuteReader();
int rt = new int() ; //declarer un autre type


while (dr.Read())
{

if (dr["login"].ToString() == textBox1.Text && dr["password"].ToString() == textBox2.Text)

{
update();
rt = 1;
}
else rt = 0;
this.Opacity = this.Opacity - 0.28;

}



if (rt == 0)
{

MessageBox.Show("login ou mot de pass est invalide ");
textBox1.Text = "";
textBox2.Text = "";
}
0
Rejoignez-nous