Requete de recherche ne fonctionnant pas

luudii34 Messages postés 24 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 16 avril 2013 - 2 mars 2009 à 10:54
luudii34 Messages postés 24 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 16 avril 2013 - 2 mars 2009 à 13:17
Bonjour!
Quelqu'un pourrait il me dire la syntaxe d'une requête sql qui utilise des champs saisis par l'utilisateur. Je m'explique: via des textbox l'utilisateur saisit deux nombres et j'ai a comparé ses nombres avec une liste dans une base de données mais on dirait que ma requête ne fonctionne pas car quand je clique sur valider mon datagridview ne se remplit pas.
Voici ma requete:
datemax et datemin ont été déclaré comme des chaines car ils sont extraits de mes textbox:
strSQL = "select AUTMAT, DTENTA, NMCLI, NMCLA, LBADR1, LBADR2, LBVILL, CDPOST, NOTEL1 from DOSSIP INNER JOIN CLIENP ON DOSSIP.CDTITU=CLIENP.CDCLI where DOSSIP.TYPDOS='CAM' and DTENTA<=datemax and DTENTA>=datemin and (CDMOT1=21 or CDMOT1=211 or CDMOT1=12 or CDMOT2=21 or CDMOT2=211 or CDMOT2=12 or CDMOT3=21 or CDMOT3=211 or CDMOT3=12 or CDMOT4=21 or CDMOT4=211 or CDMOT4=12 or CDMOT5=21 or CDMOT5=211 or CDMOT5=12 or CDMOT6=21 or CDMOT6=211 or CDMOT6=12)";

Au cas ou je laisse mon code complet, car je me demande si vraiment mon problème vient de là, je débute et j'ai vraiment beaucoup de mal à m'en sortir:
private void button1_Click(object sender, EventArgs e)
{
string datemin = textBox1.Text;
string datemax = textBox2.Text;
string strSQL = "select AUTMAT, DTENTA, NMCLI, NMCLA, LBADR1, LBADR2, LBVILL, CDPOST, NOTEL1 from DOSSIP INNER JOIN CLIENP ON DOSSIP.CDTITU=CLIENP.CDCLI where DOSSIP.TYPDOS='CAM'";
string strCon = Settings.Default.LX_LANSAConnectionString;
SqlConnection cn = new SqlConnection(strCon);
cn.Open();
if (comboBox1.GetItemText(comboBox1.SelectedItem) == "jaugeage")
{
strSQL = "select AUTMAT, DTENTA, NMCLI, NMCLA, LBADR1, LBADR2, LBVILL, CDPOST, NOTEL1 from DOSSIP INNER JOIN CLIENP ON DOSSIP.CDTITU=CLIENP.CDCLI where DOSSIP.TYPDOS='CAM' and DTENTA<=datemax and DTENTA>=datemin and (CDMOT1=21 or CDMOT1=211 or CDMOT1=12 or CDMOT2=21 or CDMOT2=211 or CDMOT2=12 or CDMOT3=21 or CDMOT3=211 or CDMOT3=12 or CDMOT4=21 or CDMOT4=211 or CDMOT4=12 or CDMOT5=21 or CDMOT5=211 or CDMOT5=12 or CDMOT6=21 or CDMOT6=211 or CDMOT6=12)";
}
else if (comboBox1.GetItemText(comboBox1.SelectedItem) == "essai d'étanchéité")
{
strSQL = "select AUTMAT, DTENTA, NMCLI, NMCLA, LBADR1, LBADR2, LBVILL, CDPOST, NOTEL1 from DOSSIP INNER JOIN CLIENP ON DOSSIP.CDTITU=CLIENP.CDCLI where DOSSIP.TYPDOS='CAM' and DTENTA<=datemax and DTENTA>=datemin and (CDMOT1=18 or CDMOT1=15 or CDMOT2=15 or CDMOT2=18 or CDMOT3=15 or CDMOT3=18 or CDMOT4=18 or CDMOT4=15 or CDMOT5=15 or CDMOT5=18 or CDMOT6=18 or CDMOT6=15)";
}

SqlCommand cmd = new SqlCommand(strSQL, cn);
cmd.CommandText = strSQL;
SqlDataReader dr = cmd.ExecuteReader();
List<camion> mesCamions;
mesCamions=new List<camion>();
int i;
i = 0;


while (dr.Read())
{
mesCamions.Add(new camion());
mesCamions[i].Immatriculation = dr["AUTMAT"].ToString();
mesCamions[i].Adresse = dr["LBADR1"].ToString();
mesCamions[i].Complement = dr["LBADR2"].ToString();
mesCamions[i].DateEntree = dr["DTENTA"].ToString();
mesCamions[i].Nom = dr["NMCLI"].ToString();
mesCamions[i].Nomcla = dr["NMCLA"].ToString();
mesCamions[i].Ville = dr["LBVILL"].ToString();
mesCamions[i].Notel = dr["NOTEL1"].ToString();
mesCamions[i].Cp = dr["CDPOST"].ToString();
i++;
}

dr.Close();
cn.Close();
dataGridView1.DataSource=mesCamions;


Quelqu'un pourrait-il de m'aider svp????

5 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
2 mars 2009 à 11:01
Salut

As-tu essayé d'enlever des conditions à ta requête pour voir celle(s) qui bug(gent) ?

Krimog :
while (!succeed = try()) ;
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
2 mars 2009 à 11:10
Hello,

J'ai deux petites remarques,

Tout d'abord, pour tout ce qui vient de l'utilisateur, comme tes dates, utilise des requêtes paramétrées. Sans oublier de parser le contenu de ton champs pour obtenir un DateTime.

Ensuite, pour plus de lisibilité (et d'efficacité, je crois), utilise des requêtes avec le mot-clef IN :

SELECT ...
AND(CDMOT1 IN (21,211,12) or CDMOT2 IN(21,211,12) or CDMOT3 IN(21,211,12) or CDMOT4 IN(21,211,12) or  CDMOT5 IN(21,211,12) or
CDMOT6 IN(21,211,12))

D'ailleurs, j'espère pour toi que cette table n'es pas trop grande, car ce genre de requête avec un grand nombre de or n'est vraiment pas optimisé, mais si tu n'as pas le choix...

micalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
luudii34 Messages postés 24 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 16 avril 2013 1
2 mars 2009 à 11:39
Merci pour votre aide.
Je vais essayé de faire des requêtes paramétrées (je ne savais même pas que ça existait... lol)
Pour le IN, je n'y avais pas pensé en fait! Merci!!!

Par contre lorsque j'essaie de faire un pas à pas détaillé (sous visual studio) je viens de m'apercevoir que le code de mon if et de mon else if n'était même pas parcouru et je ne comprends pas pourquoi???
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
2 mars 2009 à 11:54
Hello,

à la place de comboBox1.GetItemText(comboBox1.SelectedItem), essaie combobox1.SelectedText.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luudii34 Messages postés 24 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 16 avril 2013 1
2 mars 2009 à 13:17
Merci de me répondre aussi vite!
Ca ne change rien à mon problème si je remplace comboBox1.GetItemText(comboBox1.SelectedItem) par combobox1.SelectedText.
Mon projet est bien généré mais mes boucles ne sont pas parcourues, lorsque je regarde ce qui a été mis dans ma liste "mesCamions": ma liste se remplit de toutes les informations de la base de données. Mais par contre lorsque j'affecte ma liste à mon datagridview rien ne s'affiche, j'ai un tableau vide.

Quelqu'un saurait il d'où cela peut venir???
Je suis désolée si je pose des questions peut être bête mais je galère vraiment!
0
Rejoignez-nous