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

Développement SQL Server Discussion :

SQL Erreur de syntaxe


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 29
    Points
    29
    Par défaut SQL Erreur de syntaxe
    Bonjour,

    Une partie de mon code vb me pose des problèmes, c'est au moment de l'insertion des données dans sql server.

    J'ai souvent des "erreurs de syntaxe vers(...)" jusqu'à présent j'arrivais à les résoudre mais pas celle-ci ! les ... représentent souvent ma variable de textbox.

    Ici, il s'agit d'insérer une textbox qui comprend un email. Sql ne semble pas prendre tout l'email, il s'arrête au point avant le .fr ou .com (voir le message d'erreur)

    Voici l'extrait de mon code :

    Si vous avez une idée !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     connexion.ConnectionString = " server= nomdemonserveur;Initial Catalog= nomdelatable;Integrated Security=true;"
            connexion.Open()
            With ajout_prop
                .Connection = connexion
                .CommandText = "INSERT INTO Liste_remarques (objet, [code equipe], [amelioration proposee], [Date de soumission], Email , Nom, [Pièce jointe]) VALUES ('" & objet.Text & "','" & code.Text & "','" & amelioration_p.Text & "','" & majDate & " ,'" & Email.Text & "','" & Nom.Text & "','" & ajout_pj.SafeFileName & "')"
                .ExecuteNonQuery()
    Nom : Capture.PNG
Affichages : 161
Taille : 39,2 Ko

    merci à vous !!

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    JE dirais qu'il doit manquer une ' quelque part juste avant la valeur de l’émail que tu essayer d'insérer

    Mais un point d'arret sur la lige "ExecuteNonQuery" et regarde le contenu de CommandText au moment ou tu est arrêté pour voir ce que contient ta requête réellement
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    bien vu !
    à force d'avoir la tete dedans on ne voit plus les trucs tout bête !

    Citation Envoyé par sevyc64 Voir le message
    JE dirais qu'il doit manquer une ' quelque part juste avant la valeur de l’émail que tu essayer d'insérer

    Mais un point d'arret sur la lige "ExecuteNonQuery" et regarde le contenu de CommandText au moment ou tu est arrêté pour voir ce que contient ta requête réellement

  4. #4
    Membre régulier
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mars 2016
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Mars 2016
    Messages : 58
    Points : 105
    Points
    105
    Par défaut
    Bonjour

    Attention si le contenu d'une de vos variables contient une apostrophe cela ne fonctionnera plus ! Il faudrait echapper ce caractere en le doublant.

    De plus c'est peut etre une bonne idee de creer une fonction qui "encadre" la variable d'apostrophe. Cela permet de ne plus se soucier d ajouter manuellement les apostrophes. Ca evite les risques d'erreur

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... " VALUES (" & ApostrophesEncadrer(objet.Text) & "," & ApostrophesEncadrer(code.Text) ...

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Selon mon point de vue, l'utilisation d'une fonction telle que votre "ApostrophesEncadrer" mérite au mieux un licenciement pour faute grave, au pire pour faute lourde.

    Utilisez une requête paramétrée.

    C'est plus sécurisé, plus fiable, plus rapide.
    En effet, si le paramètre est invalide :
    - Aucune injection SQL n'est possible
    - Les cas à la con que vous n'avez pas imaginé sont pris en charge
    - Le paramètre invalide est rejeté par le programme avant même d'être envoyé au serveur

    Et dans tous les cas, le même plan d'exécution pourra être réutilisé avec des paramètres différents, augmentant de façon drastique les performances générales du serveur de base de données (baisse importance de la latence et de la charge CPU)

    https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Merci pour les apostrophes, je n'avais pas tiltlé , je ne testais qu'avec du lorem ipsum ..

    Pouvez-vous me confirmer que je comprends bien les requêtes paramétrées :

    Si j'ai une variable nommée "amelioration.text" qui peut contenir des apostrophes alors dans mon code je devrais avoir :
    - dans INSERT TO la variable indiquée comme ceci "@amelioration.text" à la place de & amelioration.text &
    - .parameters("@amelioration.text", oledbType.VarChar, 8000)) dans ma partie "command"

    Est-ce ok ?

    merci

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    C'est ça.

    En revanche, les noms de variables ne doivent (je pense) pas contenir de point.

    Aussi, dans la création du paramètre, il ne faut pas mettre le @ :

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cmd.CommandText = "INSERT INTO matable (colonne1, colonne2, colonne3) values (@parametre1, @parametre2, @parametre3)";
    pParam1 = cmd.Parameters.Add("parametre1", oledbType.VarChar, 8000));
    pParam1.Value = amelioration.Text;

    Syntaxe "de tête" sans VS sous la main, et en C# qui plus est. Mais bon, logiquement tu devrais t'en sortir avec l'intellisense
    On ne jouit bien que de ce qu’on partage.

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

Discussions similaires

  1. [SQL] Erreur de syntaxe SQL
    Par gregius dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 08/08/2006, 19h10
  2. [SQL] erreur de syntaxe dans une requete
    Par einsteineuzzz dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 15/06/2006, 09h24
  3. instruction SQL : erreur de syntaxe
    Par Skizo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/05/2006, 10h54
  4. [sql] erreur de syntaxe
    Par cmoa59 dans le forum JDBC
    Réponses: 14
    Dernier message: 03/05/2005, 11h41
  5. PHP SQL =>erreur de syntaxe (operateur absent)
    Par snipes dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 14h09

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