Recuperer le resultat d'une select en c# [Résolu]

Signaler
Messages postés
79
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
17 juin 2009
-
Messages postés
7
Date d'inscription
mercredi 19 octobre 2011
Statut
Membre
Dernière intervention
9 mai 2012
-
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

4 réponses

Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
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?
Messages postés
79
Date d'inscription
mercredi 22 octobre 2008
Statut
Membre
Dernière intervention
17 juin 2009

bonsoir,
merci bien pour votre réponse Malkuth
ca etait bien marché
Messages postés
25
Date d'inscription
mardi 6 juillet 2010
Statut
Membre
Dernière intervention
18 mars 2013
1
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 :)
Messages postés
7
Date d'inscription
mercredi 19 octobre 2011
Statut
Membre
Dernière intervention
9 mai 2012
2
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 = "";
}