IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Requête Erreur SqlException [Débutant]


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Requête Erreur SqlException
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      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.

    Nom : ErreurSQLModif.png
Affichages : 197
Taille : 249,4 Ko

    Nom : Message_erreurmodif.png
Affichages : 186
Taille : 122,4 Ko

    Nom : Page_FiltreModif.png
Affichages : 196
Taille : 125,2 Ko

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    concernant la parenthèse elle sert à prioriser différement les and et les or, qui sont comme la multiplication et l'addition à ce niveau (la multiplication et les and sont prioritaires sur les additions et or)
    5+3*8 étant différent de (5+3)*8

    par contre c'est bien d'ouvrir des parenthèses mais il faut aussi les fermer, je pense que le problème vient de là, soit tu n'en fermes pas assez soit trop


    après il faut apprendre à débugger, quand tu tombes sur l'erreur, tu peux regarder le détail de l'exception (le message au moins) ici problème de syntaxe vers )
    après tu peux regarder la requête générée via les espions (dans le commandtext par exemple) pour l'analyser, tu trouveras alors quel est le problème de l'algo qui génère la requête
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonjour !

    Merci pour cette réponse !

    Et bien j'ai ajouté une parenthèse et j'ai une nouvelle erreur, plus haut dans le code cette fois ci ! Je pense que ce soit être un problème dans une requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                        // 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++;
                            }
                        }
    Nom : Message_Erreur_Ajout_Parent2.png
Affichages : 209
Taille : 206,1 Ko

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    Citation Envoyé par Addx_man Voir le message
    Et bien j'ai ajouté une parenthèse
    n'importe où et sans comprendre son utilité oui

    en gros tu as fait (5)+3*8, ce qui n'a aucune utilité

    Citation Envoyé par Addx_man Voir le message
    Je pense que ce soit être un problème dans une requête SQL
    il y a écrit SqlException et syntaxe incorrect vers ')' ... donc dire que ca ne vient pas de la requête me semble un peu raté ^^


    l'ajout des parenthèses fermantes n'est pas sur le code que tu nous as mis au début, mais il doit être ailleurs, afin d'englober une opération de manière logique
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Ha désolé, c'est idiot de ma part, je n'ai pas pris le temps de bien étudié le code avant de faire ma modification...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                        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 += ")";
                        }
    Donc la parenthèse est a la fin pour englober le résultat du if.

    Bref l'erreur n'est pas là, vue que la parenthèse est refermer. Je continue de creuser, et encore merci !

  6. #6
    Membre confirmé Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Points : 473
    Points
    473
    Par défaut
    Salut,

    Si tu as la possibilité d'accéder à la base, récupères la requête finalisée dans ta variable string et lances la directement l'éditeur SQL, tu y verras plus clair

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Julien698 Voir le message
    Salut,

    Si tu as la possibilité d'accéder à la base, récupères la requête finalisée dans ta variable string et lances la directement l'éditeur SQL, tu y verras plus clair
    Je me sert de visual studio, après pour la base le problème c'est que c'est une base de prod sous windows server 2012 et je j'ai pas trop envie faire des tests dessus... !

  8. #8
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    Bonjour,
    Je me sert de visual studio, après pour la base le problème c'est que c'est une base de prod sous windows server 2012 et je j'ai pas trop envie faire des tests dessus... !
    Si tu veux vraiment retrouver ton erreur tu devrais faire certaines choses dont tu n'as pas envie de faire.
    tu peux aussi faire une copie locale de la BD sur ton poste pour les tests ou bien encore commencer par supprimer la parenthèse qui te semble en trop et tester.

    Une autre piste serait de vérifier la correspondance de toutes les parenthèses de fermeture en t'aidant du curseur. Try.......catch est également très utile pour la détection des exceptions.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    @Prisson

    Tu a raison, je vais faire une copie de la BDD sur mon poste en locale et en faire une copie chez moi également.

    Je vais tester les Try & Catch, merci pour la suggestion, je reviendrais vers vous pour les résultats.

    Merci pour vos réponses, c'est encouragent !

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonjour, j'archive le sujet, le problème venait du fait que le i n'est pas remis a 0 lorsqu'il passe a la boucle des métiers. Je l'ai ajouté en gras en italique dans le code, donnez moi votre avis, et j'archiverais ensuite !

    En attendant, je fais des tests

    Merci à vous !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    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
    	 i=0;
         foreach(String idMetier in idMetiers) {
          if (idMetier != "") {
           if (i == 0)
            requeteMetiers += " and (ac.Metier=" + idMetier + " ";
           else
            requeteMetiers += " or ac.Metier=" + idMetier + " ";
           i++;
          }
         }

  11. #11
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Addx_man Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      foreach (String idHangar in idHangars)
                        {
                            if (idHangar != "")
                            {
                                if (i == 0)
                                    requeteHangars += " and (z.Id=" + idHangar + " ";
                                else
                                    requeteHangars += " or z.Id=" + idHangar + " ";
                                i++;
                            }
                        }
    Parfois, comprendre ce qu'il y a derrière, et l'écrire de manière plus propre permet d'éviter de nombreux soucis

    Ici, tu parcours une collection (idHangars) tout en gérant à côté une variable i qui sert d'indexeur. Bref, deux choses qu'il faut synchroniser pour que cela fonctionne comme attendu (i est bien incrémenté, mais est-il mis à 0 avant la boucle ?).

    De plus, la requête est bien compliquée, sans compter le fait qu'elle omet la parenthèse fermante en SQL.

    Ici, on cherche simplement à générer une requête SQL, et plus particulièrement une partie de la clause WHERE, qui prendra la forme suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (z.Id = 1 OR z.Id = 2 OR z.Id = 3)

    Et donc, pour arriver à cela, on peut le faire en une ligne, et qui sera beaucoup plus lisible et maintenable :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    requeteHangars += " AND z.Id IN (" + String.Join(", ", idHangars) + ")"
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    Parfois, comprendre ce qu'il y a derrière, et l'écrire de manière plus propre permet d'éviter de nombreux soucis

    Ici, tu parcours une collection (idHangars) tout en gérant à côté une variable i qui sert d'indexeur. Bref, deux choses qu'il faut synchroniser pour que cela fonctionne comme attendu (i est bien incrémenté, mais est-il mis à 0 avant la boucle ?).

    De plus, la requête est bien compliquée, sans compter le fait qu'elle omet la parenthèse fermante en SQL.

    Ici, on cherche simplement à générer une requête SQL, et plus particulièrement une partie de la clause WHERE, qui prendra la forme suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (z.Id = 1 OR z.Id = 2 OR z.Id = 3)

    Et donc, pour arriver à cela, on peut le faire en une ligne, et qui sera beaucoup plus lisible et maintenable :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    requeteHangars += " AND z.Id IN (" + String.Join(", ", idHangars) + ")"

    Citation Envoyé par Addx_man Voir le message
    Bonjour, j'archive le sujet, le problème venait du fait que le i n'est pas remis a 0 lorsqu'il passe a la boucle des métiers. Je l'ai ajouté en gras en italique dans le code, donnez moi votre avis, et j'archiverais ensuite !

    En attendant, je fais des tests

    Merci à vous !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    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
    	 i=0;
         foreach(String idMetier in idMetiers) {
          if (idMetier != "") {
           if (i == 0)
            requeteMetiers += " and (ac.Metier=" + idMetier + " ";
           else
            requeteMetiers += " or ac.Metier=" + idMetier + " ";
           i++;
          }
         }



    Bonjour !

    Tout d'abord merci pour votre message !

    C'est vrais que la requête est compliquer ! J'ai mis un peu de temps a tout comprendre, mais maintenant c'est plus clair !

    Du coup j'ai remis mon dernier message en citation pour que ce soit plus clair, en gros, le même traitement est effectuer une deuxième fois pour Idmetier sauf que le i n'étais pas remis a 0 ! J'ai corrigé cela, sauf que j'ai un problème d'HTML il semblerait donc je me penche dessus

    Voilà, merci à vous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Requête][Erreur 3331] Enregistrer avant de modifier
    Par olivierc25 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/03/2007, 09h50
  2. Agrégats et sous-requêtes "Erreur de syntaxe"
    Par Finidrigoler dans le forum Access
    Réponses: 3
    Dernier message: 08/12/2006, 17h39
  3. exécution de requête - erreur 3464
    Par robert_trudel dans le forum Access
    Réponses: 3
    Dernier message: 27/10/2006, 09h08
  4. Problème sur requête : erreur 1111
    Par tiger33 dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/10/2006, 12h30
  5. [Etat][Requête] Erreur d'éxécution '3364'
    Par Optimus dans le forum IHM
    Réponses: 2
    Dernier message: 05/01/2006, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo