Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur incorrect syntax near 'de'

22 septembre 2021 à 14:58:05

Bonjour,

je suis actuellement entrais de développer un logiciel de fin de cycle. je suis confronté une erreur que je n'arrive pas trouvé la réponse depuis plusieurs jours j'ai recherché sur internet sans succès.

message d'erreur :Erreur incorrect syntax near 'de'

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace KELASI.PL
{
    public partial class FRM_ListeReglemenEtudiant : Form
    {
        private dbKelasiContext db;

        public SqlConnection con = new SqlConnection();
       // public SqlConnection con1 = new SqlConnection();
        public SqlCommand com = new SqlCommand();
       // public SqlCommand com1 = new SqlCommand();
        public DataSet ds = new DataSet();
        public SqlDataAdapter da = new SqlDataAdapter();
        public SqlDataReader dr;
       // public SqlDataReader dr1;

        // fonction connecter 

        public void connecter()
        {
            if (con.State == ConnectionState.Closed)
            {
                con.ConnectionString = "Data Source=DESKTOP-F1HOKVA\\SQLSERVER;Initial Catalog=GestionScool;Integrated Security=True";
                con.Open();
            }
        }

        //fonction déconnecter
        public void déconnecter()
        {
            if (con.State == ConnectionState.Closed)
            {
                con.Close();
            }
        }

        /// <summary>
        /// /////////////////////
        /// 
        /// </summary>
        /// 

        public FRM_ListeReglemenEtudiant()
        {
            InitializeComponent();
            db = new dbKelasiContext();

            //Affiché les Option dans le cmboption
            CmbOption.DataSource = db.options.ToList();
            //Pour filtrer seulement les option
            CmbOption.DisplayMember = "libelleOption";//Afficher les nom du option
            CmbOption.ValueMember = "codeOption";


            //Affiché les Option dans le cmboption
            CmbcCycle.DataSource = db.cycles.ToList();
            //Pour filtrer seulement les option
            CmbcCycle.DisplayMember = "cycle1";//Afficher les nom du option
            CmbcCycle.ValueMember = "codecycle";
        }

        private void BtnFermer_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        /// <summary>
        /// ////////////
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// 

        private void FRM_ListeReglemenEtudiant_Load(object sender, EventArgs e)
        {
        }

        private void dtgReinscription_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            Close();
        }

        private void BtnAfficher_Click(object sender, EventArgs e)
        {
            connecter();

            com.CommandText = "SELECT E.codeEt, E.NmEt, E.PrnmEt, O.codeOption, O.libelleOption, C.codecycle, C.cycle, CF.CoutFormation, R.Recuction FROM etudiant E, options O, cycle C, Reduction R, CoutFormation CF, inscrire I WHERE E.codeEt = I.codeEt and O.codeOption = I.codeOption and C.codecycle = I.codecycle and O.codeOption = " + CmbOption.Text +" and C.codecycle = "+ CmbcCycle.Text +" and CF.CodeCFor = I.CodeCFor and R.codeRed = I.codeRed";

            try
            {
                com.Connection = con;
                dr = com.ExecuteReader();
                DtgReglement.Rows.Clear();

                while (dr.Read())
                {
                    DtgReglement.Rows.Add(dr.GetValue(0), dr.GetValue(1), dr.GetValue(2), dr.GetValue(3), dr.GetValue(4), dr.GetValue(5), dr.GetValue(6), dr.GetValue(7), dr.GetValue(8));
                }
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erreur :" + ex.Message);
                con.Close();
            }

            déconnecter();
        }
    }
}

le but du code est sélectionné les données au niveau des deux combobox qui va me permettre d'afficher par rapport à cet sélection et le filtré.

  • Partager sur Facebook
  • Partager sur Twitter
22 septembre 2021 à 15:47:25

On va laisser passer l'utilisation des DataReader qui sont totalement obsolètes depuis près de 20 ans. (Putain de prof. Hubernatus, faudrait au moins qu'il passe aux DataAdapter si les ORM ça lui donne des boutons)

Avec la ligne de l'erreur, ça serait plus simple.

Mais bon, 90% du temps, quand on n'utilise pas de requête préparée mais qu'on la bricole à coup de concaténation de chaîne une requête SQL (ligne 96), c'est le meilleur moyen pour se prendre des attaques par SQL Injection par un script kiddie de 11 ans, mais en plus un contenu 'légitime' des colonnes peut tout péter.

En plus si le type des colonnes "codeOption" et "codecycle" ne sont pas de type numérique, elles sont où les simple-quotes pour entourer les valeurs des conditions ?

Faut quand même que le contenu du champ "CommandText" soit une requête SQL "valide" avant d'aligner les trous de sécurités à base de concaténation de chaine.

Mettez un point d'arrêt en ligne 98, affichez le contenu de "com.CommandText" et essayez cette requête dans un client SQL pour voir si le SQL que vous bricolez est valide.

Une fois que vous avez vu la cochonnerie qui devait ressembler à du SQL, pensez à ne plus faire ces concaténations diaboliques et utilisez des requêtes préparées (et accessoirement virée ces saloperies de DataReader, avec, par exemple, des DataAdapter).

P.S.: en plus si les tables ne sont pas grosses, vous pouvez tous mettre dans un DataSet et utiliser une simple DataView au lieu de faire des aller-retour avec le serveur de base de données juste pour ce filtrage à la noix.

-
Edité par bacelar 22 septembre 2021 à 15:55:51

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
22 septembre 2021 à 16:20:26

pour moi, on doit dire où chercher à un SELECT: SELECT [champs] FROM [tables] [WHERE Conditions ...]

A mon avis il faut aussi que tu regardes du côté des jointures SQL 

(et il doit manquer des guillemets à certains endroits dans la requête)

-
Edité par umfred 22 septembre 2021 à 16:21:29

  • Partager sur Facebook
  • Partager sur Twitter
22 septembre 2021 à 19:47:51

la requête SQL marche, si je ne met pas les deux combobox. Quand je remet les combobox rien ne marche.

-
Edité par André Parfait 22 septembre 2021 à 19:56:13

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2021 à 10:20:53

>la requête SQL marche

Arrêtez de greffer des jambes à n'importe quoi.

On vous dit que vous programmer n'importe comment et vous nous dites que le machin "marche", vous êtes Jésus.

Prenez un cas où cela ne fonctionne pas, récupérer la requête que vous bricolez comme un cochon et faites la passer dans un client SQL de votre SGBD utilisé.

Si vous êtes un flemmard, postez la requête (la vraie, celle que vous bricolez) sur le forum.

-
Edité par bacelar 23 septembre 2021 à 14:42:33

  • Partager sur Facebook
  • Partager sur Twitter
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
23 septembre 2021 à 14:10:53

André Parfait a écrit:

la requête SQL marche, si je ne met pas les deux combobox. Quand je remet les combobox rien ne marche.

-
Edité par André Parfait il y a environ 18 heures


voir ma dernière remarque sur la probable absence de guillemets à certains endroits (si on cherche un texte, il faut le mettre entre guillemet, si on passe par la concaténation; avec une requête préparée, ça le fait "tout seul")
  • Partager sur Facebook
  • Partager sur Twitter