[Débutant] SqlException

Résolu
addx_man
Messages postés
19
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
7 mars 2018
- Modifié le 30 janv. 2018 à 10:40
nagaD.scar
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
- 13 mars 2018 à 11:45
Bonjour,

Je suis apprentis et je viens d'intégré une nouvelle entreprise. On m'a confié pour mission de travailler sur une interface qui tourne en ASP.Net avec une base SQL, et dans laquelle je dois corriger une erreur que je n'arrive a pas a résoudre.

J'ai également une question concernant la syntaxe du code suivant:

  foreach (String idHangar in idHangars)
{
if (idHangar != "")
{
if (i == 0)
requeteHangars += " and (z.Id=" + idHangar + " ";
else
requeteHangars += " or z.Id=" + idHangar + " ";
i++;
}
}


A quoi sert la parenthèse en gras/souligné au niveau de z.id=" +idHangar +""; ? De séparateur ? j'ai eu l'impression qu'elle étais en trop mais il y a des parenthèses similaire à d'autres endroits du code.

Je vous poste l'erreur en capture d'écran ainsi que l'interface afficher avant l'erreur, c'est quand ont envoi les filtres que l'erreur apparaît, en espérant que vous pourriez m'apporter une aide !

Merci à vous.






A voir également:

2 réponses

nagaD.scar
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
30 janv. 2018 à 13:52
Salut,

En l'état tu donnes trop peu d'information: on est pas en mesure de voir toute la construction de la requete.

La parenthèse peu ou non être une erreur, ca va dépendre de tes conditions .. mais vu qu'on ne voit pas toute la construction de la clause, il n y a pas de réponses à donner.

D'après le message d'erreur, il semblerai justement que le problème provienne d'une parenthèse fermante qui en trop.

Bref au final: peux-tu nous montrer toute la construction de ta requête ? (à mininma la construction du where pour au moins vérifier la syntaxe)

naga
1
addx_man
Messages postés
19
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
7 mars 2018

30 janv. 2018 à 14:23
Sur la requête que j'ai posté, il y a une parenthèse fermente


foreach (String idHangar in idHangars)
{
if (idHangar != "")
{
if (i == 0)
requeteHangars += " and (z.Id=" + idHangar + " ";
else
requeteHangars += " or z.Id=" + idHangar + " ";
i++;
}
}
if (i != 0)
{
requeteHangars += ")";
}



Je pense que le problème viens de la requête SQL, mais il y a trop de données a traité, j'ai vraiment du mal.

Je peu poster le SQL mais je ne sais pas si ça peu aider

Merci pour la réponse en tous cas !
0
nagaD.scar
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
30 janv. 2018 à 14:30
encore une fois en l'état c'est assez limité, mais ce que l 'on peut surtout voir c'est que dans le cas ou il n'y a pas d'ID dans ta liste, ta requete aura une parenthèse fermante sans avoir été ouverte.

Je te conseil d'essayer de faire ceci:

bool bFilter = false ; 
foreach (String idHangar in idHangars)
{
	if (idHangar != "")
	{
		bFilter = true;
		if (i == 0)
			requeteHangars += " and (z.Id=" + idHangar + " ";
		else
			requeteHangars += " or z.Id=" + idHangar + " ";
		i++;
	}
}
if (bFilter)
{
	requeteHangars += ")";
}


redis moi.

naga
0
addx_man
Messages postés
19
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
7 mars 2018

30 janv. 2018 à 15:05
Merci pour tes réponses !

Toujours le même résultat, je perd la tête moi avec tout ça moi !

        

protected void Page_Load (object sender, EventArgs e)
{

using (SqlCommand scmd = new SqlCommand())
{
if (Request.Form["idHangars"] != null && lblHangars.Text == "")
{
lblHangars.Text = Request.Form["idHangars"];
}
if (Request.Form["idMetiers"] != null && lblMetiers.Text == "")
{
lblMetiers.Text = Request.Form["idMetiers"];
}
// se connecter à la base de donnée
scmd.Connection = connectionString();
scmd.CommandType = CommandType.Text;
scmd.CommandText = "";
String requeteHangars = "", requeteMetiers = "", risqueChantier = "", risqueChantierWhere = "", toutaction = ""; // Traitement requete : recherche par hangars selectionnee
String visitea = "", visiteb = "", visitec = "", visitez = "", visitedepanage = "", visitevip = "";
// si on recoit une réponse d'un formulaire liste hangars
if (lblHangars.Text != null)
{
String[] idHangars = new String[100];

// on prend la réponse du formulaire la liste des hangars choisis
idHangars = lblHangars.Text.Split(new[] { "-" }, StringSplitOptions.None);
int i = 0;

// la liste des hangars est délimité par des tirets d'union "-"
// cette boucle va prendre l'ensemble des id hangars et les remplace par une requete sql
foreach (String idHangar in idHangars)
{
if (idHangar != "")
{
if (i == 0)
requeteHangars += " and (z.Id=" + idHangar + " ";
else
requeteHangars += " or z.Id=" + idHangar + " ";
i++;
}
}
if (i != 0)
{
requeteHangars += ")";
}
//}
// si on recoit une réponse d'un formulaire liste metiers
if (lblMetiers.Text != null)
{
String[] idMetiers = new String[100];
// on prend la réponse du formulaire la liste des métiers choisis
idMetiers = lblMetiers.Text.Split(new[] { "-" }, StringSplitOptions.None);

if (Request.Form["clos"] != null && Request.Form["clos"].ToString() == "true")
{
requeteMetiers += "";
}
// la liste des metiers est délimité par des tirets d'union "-"
// cette boucle va prendre l'ensemble des id metiers et les remplace par une requete sql
foreach (String idMetier in idMetiers)
{
if (idMetier != "")
{
if (i == 0)
requeteMetiers += " and (ac.Metier=" + idMetier + " ";
else
requeteMetiers += " or ac.Metier=" + idMetier + " ";
i++;
}
}
if (i != 0)
{
requeteMetiers += "or ac.Metier is null)";
}
}


if (chkbA.Checked)
{
visitea = " and Visite_a=1";
}
else
{
visitea = "";
}

if (chkbB.Checked)
{
visiteb = " and Visite_b=1";
}
else
{
visiteb = "";
}

if (chkbC.Checked)
{
visitec = " and Visite_c=1";
}
else
{
visitec = "";
}

if (chkbZ.Checked)
{
visitez = " and Visite_z=1";
}
else
{
visitez = "";
}

if (chkbDepanage.Checked)
{
visitedepanage = " and Depanage=1";
}
else
{
visitedepanage = "";
}

if (chkbVIP.Checked)
{
visitevip = " and Visite_vip=1";
}
else
{
visitevip = "";
}

if (ddlRapport.SelectedValue == "2")
{
toutaction = " and Clos is null";
}
else if (ddlRapport.SelectedValue == "1")
{
toutaction = " and Clos is not null";
}

if (chkbRisque.Checked)
{
risqueChantierWhere = " and ch.numChantierId is not null ";
risqueChantier = " and cc.Insatisfaction_client is not null and cc.Impact_da is not null and cc.Risque_cout is not null and cc.Risque_delai is not null ";
}

// Requête génération de tous les chantiers
scmd.CommandText = "select c.id_chantier, immatriculation, ta.type_avion, ns.numero_serie, c.numeroChantierId as numChantier, Date_arrivee, Nature_chantier, Point_fixe, Vol_control, c.Date_livraison as datelivraison, Niveau_chantier, h.Nom, case z.emplacement WHEN 1 THEN 'EXT' else '' end as emplacement, r2.Nom as responsableTechniqueNom, SUBSTRING(r2.Prenom, 1, 1) as responsableTechniquePrenom, r1.Nom as responsableCommercialNom, SUBSTRING(r1.Prenom, 1, 1) as responsableCommercialPrenom, fin_inspection, cc.Travaux_peinture from Chantiers c left join commentaires_chantiers cc on cc.[numChantierId]=c.id_chantier inner join Avions av on av.id_avion = c.idAvion inner join typeAvions ta on ta.Id = av.type_avionId inner join numeroSeries ns on ns.Id = av.numero_serieId inner join Zones z on z.Id = c.idZoneHangar inner join Hangars h on h.Id = z.idHangar left join commentaires_chantiers ch on ch.numChantierId=c.id_chantier left join Responsables r1 on r1.Id=c.idResponsableCommercial left join Responsables r2 on r2.Id = c.idResponsableTechnique where Date_livraison is null " + risqueChantier + " " + requeteHangars + " " + visitea + " " + visiteb + " " + visitec + " " + visitez + " " + visitedepanage + " " + visitevip + " " + risqueChantier + " order by z.preference asc, c.numeroChantierId asc, immatriculation asc";


Label8.Text = scmd.CommandText;
sqlConnection1.Open();
SqlDataReader articleReader = scmd.ExecuteReader();
0
nagaD.scar
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
30 janv. 2018 à 15:14
mmh ce que j'avais proposé n'était pas utile en fait, bref x)

Je check ca tout à l'heure !
0
addx_man
Messages postés
19
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
7 mars 2018

30 janv. 2018 à 15:20
Haha pas de soucis merci ^^
0
Whismeril
Messages postés
17345
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
26 mai 2022
596
31 janv. 2018 à 07:43
Bonjour à tous les 2, je me permets un petit rappel sur la coloration syntaxique.
En l’état, vous l’utilisez mal tous les 2.
Il faut préciser de quel langage il s’agit, en cliquant sur la petite flèche vers le bas.
Exemple, vous:
String numChantier2 = "", nomHangar = "", emplacement = "", nomMetier = "";
int cptHangar = 0, cptAction = 0, cptImmat = 0;

// Si la requête retoure des informations
if (articleReader.HasRows)
{

// Lire les informations
while (articleReader.Read())
{
SqlDataReader reader2;
// Récupérer l'ensemble des informations sur le chantier
String id_chantier = (articleReader["id_chantier"] == DBNull.Value ? "" : articleReader.GetInt32(0).ToString());
String numChantier = articleReader["numChantier"].ToString();
//...


En précisant qu’il s’agit de c#
String numChantier2 = "", nomHangar = "", emplacement = "", nomMetier = "";
                    int cptHangar = 0, cptAction = 0, cptImmat = 0;

                    // Si la requête retoure des informations
                    if (articleReader.HasRows)
                    {

                        // Lire les informations
                        while (articleReader.Read())
                        {
                            SqlDataReader reader2;
                            // Récupérer l'ensemble des informations sur le chantier
                            String id_chantier = (articleReader["id_chantier"] == DBNull.Value ? "" : articleReader.GetInt32(0).ToString());
                            String numChantier = articleReader["numChantier"].ToString();
//....


C’est mieux non?

Plus de détails ici
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
1
addx_man
Messages postés
19
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
7 mars 2018

31 janv. 2018 à 08:21
Ha oui, beaucoup mieux merci :)
0