[Débutant] SqlException

addx_man 16 Messages postés lundi 5 décembre 2011Date d'inscription 13 février 2018 Dernière intervention - 30 janv. 2018 à 10:33 - Dernière réponse : addx_man 16 Messages postés lundi 5 décembre 2011Date d'inscription 13 février 2018 Dernière intervention
- 13 févr. 2018 à 12:08
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.






Afficher la suite 

27 réponses

Répondre au sujet
nagaD.scar 4221 Messages postés samedi 8 septembre 2007Date d'inscription 13 février 2018 Dernière intervention - 30 janv. 2018 à 13:52
+1
Utile
24
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
nagaD.scar 4221 Messages postés samedi 8 septembre 2007Date d'inscription 13 février 2018 Dernière intervention - 13 févr. 2018 à 11:12
normalement je me suis positionné à la suite de ton tableau.
J'utilisais "htmlTable" car il correspond à un des éléments pour "remplir" ta page web (et je c'est le seul que je connais au vu de ton code).

Ensuite lorsque tu dis brut, tu sous entends les resultas de ta requête? Si c'est le cas, il ne me semble pas, de mémoire, qu'il y ai un équivalent au "print_r" en c# , ce qui sous entend que tu aura un parcours à faire tout de même de tes résultats (ensuite le format dans lequel il sera afficher, c'est toi qui le gère).
tu peux tenter le toString à chaque occurence de ton articleReader, mais je n ai pas de compilateurs (et la derniere fois que j'ai utilisé des transact sql en c# remonte a pas mal de temps) donc je ne peux pas vérifier le comportement.
nagaD.scar 4221 Messages postés samedi 8 septembre 2007Date d'inscription 13 février 2018 Dernière intervention - 13 févr. 2018 à 11:29
Comme dis je n'ai pas de quoi tester, mais je penses que quelque chose dans ce genre fonctionnera (j'ai retiré la requete pour que ca soit lisible):

    scmd.CommandText = "select ...................";
     sqlConnection1.Open();
     SqlDataReader articleReader = scmd.ExecuteReader();

	 DataTable schemaTable = articleReader.GetSchemaTable();
	 htmlTable.Append("<h1>Request</h1>");
	 htmlTable.Append("<p>"+ scmd.CommandText+"</p>");

	htmlTable.Append("<h1>Results</h1>");
	while (articleReader.Read()) {
		htmlTable.Append("<p>");
			foreach (DataColumn myProperty in schemaTable.Columns) {
				htmlTable.Append(myProperty.ColumnName + ":" + articleReader[myProperty.ColumnName].ToString() + "<br />");
		}
		htmlTable.Append("</p>");
	} 
addx_man 16 Messages postés lundi 5 décembre 2011Date d'inscription 13 février 2018 Dernière intervention - 13 févr. 2018 à 11:41
Par brut j'enrend les données qui sont envoyé par le formulaire, donc les cases cochés par le USer exemple, il coche le H1; H3; H8; ça va envoyé 1, 3, 8;

Du coup j'ai utilisé Response.Write sous ce cette forme:

Response.Write(Request.Form["idHangars"]);

Et en gros ça me display les numéros de hangars, qui sont les données bruts envoyées :D !

Bon du coup, maintenant que je sais que les données envoyées te reçus sont bonnes, je sais que le problème ne viens pas de la !

Je continue de creuser !

Merci de ton aide :)
nagaD.scar 4221 Messages postés samedi 8 septembre 2007Date d'inscription 13 février 2018 Dernière intervention - 13 févr. 2018 à 11:47
ah ok j'avais compris à l envers donc ^^
Après si tu es en debug, je te conseil d'utiliser la console, au moins ca te permets d'avoir des résultats en live sans toucher au rendu final (ce qui te permet de faire une validation de ta méthode)

bon dev^^
addx_man 16 Messages postés lundi 5 décembre 2011Date d'inscription 13 février 2018 Dernière intervention - 13 févr. 2018 à 12:08
Hmm ouais ça serais vachement plus simple en console effectivement... Faut que je regarde comment faire.

En fait, mon form envoi n'importe quoi en données !

Donc en fait je continue a creuser la dedans !
Commenter la réponse de nagaD.scar
Whismeril 11017 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 février 2018 Dernière intervention - 31 janv. 2018 à 07:43
+1
Utile
1
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
addx_man 16 Messages postés lundi 5 décembre 2011Date d'inscription 13 février 2018 Dernière intervention - 31 janv. 2018 à 08:21
Ha oui, beaucoup mieux merci :)
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.