none
problème avec les Guillemet RRS feed

  • Question

  • bonjour ,

    j'essai d'ajouter des données à ma BD l'un de mes champs contient (une quote) : (technicien spécialisé en système de l informatique)

    lorsque je clique pour ajouter : on m'affiche une erreur :

    Syntaxe incorrecte vers 'informatique'.
    Ouvrez les guillemets après la chaîne de caractères ',1168699)'.

    voilà mon code d'ajout :

    try            {                c.cmd = c.cn.CreateCommand();                c.cmd.CommandText = "insert into FormationAcademique (DiplomeObtenu , Annee , Etablissement,Discipline,Langue, PPR)  values ('" + TextBox_dip.Text + "'," + TextBox_annee.Text + ",'" + TextBox_etab.Text + "','" + TextBox_discip.Text + "','" + TextBox_langue.Text + "'," + Session["Code"] + ")";                if (c.cn.State == System.Data.ConnectionState.Closed)                {                    c.cn.Open();                }                c.cmd.ExecuteNonQuery();                gv_form.DataBind();            }            catch (Exception ex)            {                Response.Write(ex.Message);            }            finally            {                if (c.cn.State == ConnectionState.Open)                {                    c.cn.Close();                }                TextBox_dip.Text = "";                TextBox_annee.Text = "";                TextBox_etab.Text = "";                TextBox_discip.Text = "";                TextBox_langue.Text = "";            }

    je veux juste que l'user puisse écrire n'importe quelle info qui contient apostrophe (')

    merci


    • Modifié tiddar mercredi 12 mars 2014 11:50
    mercredi 12 mars 2014 11:11

Réponses

  • Bonjour,

    Tout dépend de votre base de données, en MS SQL Server il faut doubler l'apostrophe.

    String txt = "l'informatique";
    
    String txtQuoted = txt.Replace("'", "''");
    
    // txtQuoted == "l''informatique"
    

    Sinon on peut également utiliser des commandes paramétrées, mais cela dépend du type de connexion que vous utilisez. L'avantage c'est que en fonction du type de données la librairie la valeur va être encodée correctement.

    Cordialement,


    Yan Grenier

    • Proposé comme réponse Aurel Bera jeudi 13 mars 2014 09:36
    • Marqué comme réponse Aurel Bera jeudi 13 mars 2014 14:58
    mercredi 12 mars 2014 13:51

Toutes les réponses

  • Bonjour,

    Pour ajouter une quote dans une requête il faut ajouter avant celle-ci un anti-slash (\).

    Exemple : "L\'autre jour j\'avais pris [...]"

    Cordialement.

    mercredi 12 mars 2014 13:23
  • Bonjour,

    Tout dépend de votre base de données, en MS SQL Server il faut doubler l'apostrophe.

    String txt = "l'informatique";
    
    String txtQuoted = txt.Replace("'", "''");
    
    // txtQuoted == "l''informatique"
    

    Sinon on peut également utiliser des commandes paramétrées, mais cela dépend du type de connexion que vous utilisez. L'avantage c'est que en fonction du type de données la librairie la valeur va être encodée correctement.

    Cordialement,


    Yan Grenier

    • Proposé comme réponse Aurel Bera jeudi 13 mars 2014 09:36
    • Marqué comme réponse Aurel Bera jeudi 13 mars 2014 14:58
    mercredi 12 mars 2014 13:51
  • Bonjour

    La solution recommandée c'est d’utiliser des paramètres. Sauf l’apostrophe,  les paramètres vous seront utiles dans quelques situation comme : sécurité avec  SQL injection, transfert des paramètres de type Date ou nombres avec un format régional spécifique, et dans certains cas même la vitesse d’exécution.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 12 mars 2014 14:54
  • je dois rendre mon travail demain et je n'ai pas le temps pour refaire mon code , c'est pourquoi je cherche une solution rapide , j'avais déjà vu avant une partie de code qui se fait en code source dans le contrôle Textbox mais je ne m'en rappelle plus .

    merci

    mercredi 12 mars 2014 15:43
  • "l'informatique" c'est juste un exemple , l'user va saisir ce que lui désir par obliger ce mot .votre exemple n'est pas général .

    merci

    mercredi 12 mars 2014 15:45
  • Heu bin utilisez la propriété Text de votre TextBox à la place de la chaîne de caractère !!

    Cordialement,


    Yan Grenier

    mercredi 12 mars 2014 15:51
  • Bonjour,

    je cherche à la place de faire un RegularExpressionValidator , mais je ne sais pas l'expression à utiliser , j'ai fait :

     (!['])  , ça affiche le msg d'erreur quand je saisi un (') mais quand je l'enleve le message d'erreur reste !!!!!

    <tr>                            <td>                                Diplome obtenu :                            </td>                            <td>                                <asp:TextBox ID="TextBox_dip" runat="server" CssClass="TextBox"></asp:TextBox>                                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="TextBox_dip" ValidationExpression="(!['])" runat="server" ErrorMessage="error , ne saisissez pas un (')"></asp:RegularExpressionValidator>                                <ajaxToolkit:ValidatorCalloutExtender runat="Server" ID="PNReqEx" TargetControlID="RegularExpressionValidator1" />                            </td>                        </tr>



    merci
    • Modifié tiddar jeudi 13 mars 2014 09:39
    jeudi 13 mars 2014 09:38
  • Bonjour,

    Je ne saisi pas pourquoi vous vous compliquez les choses !

    Vous n'avez qu'à encoder vos apostrophes !

    TextBox_dip.Text.Replace("'", "''")

    Cordialement,

    Yan Grenier


    Yan Grenier

    jeudi 13 mars 2014 09:45
  • ça ne marche pas je reçois une erreur ,

      

    TextBox_dip.Text.Replace(
    
    
    
    "'",
    "''");

     je l'ai mis en Load le code




    • Modifié tiddar jeudi 13 mars 2014 09:54
    jeudi 13 mars 2014 09:51
  • TextBox_dip.Text.Replace("'", "''");

    ce code montre que (') va être remplacée par ('') , je pense si vous faites ça dans SQL ça vous donnera une erreur avant même d'exécuter  .

    jeudi 13 mars 2014 10:02
  •  Cette erreur n'est pas liée au replacement mais plutôt aux Response.Write(ex.Message);  ou un autre Response.Write!!!!  
    On a déjà eu ce problème dans un autre thread. 
    En plus le replacement se fait en code VB, on change seulement la requête qui sera envoyée vers SQL. VB ne fait pas aucune validation de la requête. VB envoyé le string tel quel, le SQL serveur essaye de l'exécuter, et  il retourne une erreur (exception) vers VB en cas d’erreur ou le résultat.
    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.



    jeudi 13 mars 2014 10:03
  • oui mais pourquoi ce problème ne s'est pas produit avant que je mette ce code ?

    parce que marchais il y a un quelques instants ... 

    jeudi 13 mars 2014 10:06
  • Utilisez le debugger pour voir qu’est qui se passe, mais a un première vue, en cas d’exception vous allez trouver ce message d’erreur.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 10:14
  • aucune exception ne se produit lorsque je debug 
    jeudi 13 mars 2014 10:20
  • Dans ce cas je dirais que le code fonctionne bien, mais le problème c'est dans une autre côte.

    Toujours, vérifiez votre code contre les response.Write et Server.Transfer

    http://social.msdn.microsoft.com/Forums/fr-FR/293d4781-b2f3-49fa-9187-358aa475a392/problme-avec-les-guillemet?forum=webdevfr

    Cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 10:24
  • j'ai remplacé response.Write par Server.Transfer , ça me donne erreur dans le textbox où j'ai saisi un champ avec Apostrophe
    jeudi 13 mars 2014 10:40
  • Je n'ai pas dit de remplacer un avec l'autre, vous devez les éliminer les deux!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 10:42
  • mais je n'avez pas la ligne : Server.Transfer . bref j'ai supprimé le response mais toujours la même erreur
    • Modifié tiddar jeudi 13 mars 2014 10:53
    jeudi 13 mars 2014 10:48
  • Vous avez dans la page Trace="True" :

    <%@ Page Language="VB" Trace="True" ...

    Si oui enlevez  Trace="True" ca peut aussi produire cette erreur.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 11:02
  • non je n'en ai pas :

     

    <% @PageLanguage="C#"AutoEventWireup="true"CodeBehind="cv.aspx.cs"Inherits="cvtech.cv"%>


    jeudi 13 mars 2014 11:03
  • J'ai remarqué dans le code :
    c.cmd.ExecuteNonQuery();          
    gv_form.DataBind();    
    Supprimez gv_form.DataBind();   il n'y a pas le cas de l'appeler.
    Pouvez-vous nous montrer toute la fonction ?


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 11:09
  • si je supprimer

    gv_form.DataBind();   ma gridview ne va pas afficher les modifications que j'ai faites

     

           protected void Buttonvaliderajoutform_Click1(object sender, EventArgs e)        {            try            {                               c.cmd = c.cn.CreateCommand();                c.cmd.CommandText = "insert into FormationAcademique (DiplomeObtenu , Annee , Etablissement,Discipline,Langue, PPR)  values ('" + TextBox_dip.Text + "'," + TextBox_annee.Text + ",'" + TextBox_etab.Text + "','" + TextBox_discip.Text + "','" + TextBox_langue.Text + "'," + Session["Code"] + ")";                if (c.cn.State == System.Data.ConnectionState.Closed)                {                    c.cn.Open();                }                 c.cmd.ExecuteNonQuery();                gv_form.DataBind();            }            catch (Exception ex)            {                //Response.Write(ex.Message);                //Server.Transfer(ex.Message);            }            finally            {                if (c.cn.State == ConnectionState.Open)                {                    c.cn.Close();                }                TextBox_dip.Text = "";                TextBox_annee.Text = "";                TextBox_etab.Text = "";                TextBox_discip.Text = "";                TextBox_langue.Text = "";            }        }

    jeudi 13 mars 2014 11:13
  • Sans relire les informations dans la BD après l'insert, gv_form.DataBind();    fait rien.
    Si vous exécutez la page avec IE sans Debug, vous avez plus de détails sur le message d'erreur?


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 11:26
  • Et une autre astuce :

    Essayez la page sans faire rien dans Buttonvaliderajoutform_Click1.
    Vous avez toujours le message d'erreur?

     


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 11:38
  • si j'enleve le code du buttonvaliderajoutform_click1 rien de ne se passe

    C'EST NORMAL
    • Modifié tiddar jeudi 13 mars 2014 11:53
    jeudi 13 mars 2014 11:49
  • Je sais, mais le message d'erreur est toujours présent?

    Vous actualisez l’UpdatePanel  synchrone ou asynchrone ?

    Cordialement,

     

     


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 11:54
  • non il n y a aucun message d'erreur
    jeudi 13 mars 2014 11:56
  • L'erreur est liée à un UpdatePanel. Essayez de redémarrer la solution avec un autre explorateur pour voir si le fonctionnement est correct.
    Supprimez aussi le cache d’IE et essayez de nouveau avec IE.


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 12:01
  • cette erreur de javascript ne se produit que sur IE, sur chrome quand je debug sur mon code , je reçois cette erreur sur cette ligne (technicien spécialisé en système de l informatique), comme j'ai mentionnée en haut :

    Syntaxe incorrecte vers 'informatique'.
    Ouvrez les guillemets après la chaîne de caractères ',1168699)'.

    merci

    • Modifié tiddar jeudi 13 mars 2014 12:27
    jeudi 13 mars 2014 12:21
  • Vous avez un UpdatePanel dans la page, n'est pas?
    C'est Synchrone ou Asynchrone?
    Pouvez-vous nous montrer le code ASPX de votre UpdatePanel. Le boutton buttonvaliderajoutform c'est dans le updatePanel?


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 12:26
  • presque tout le contenu de ma page est dans l'updatePanel , le buttonvaliderajoutform aussi .

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>    Contenu de ma page .......</ContentTemplate>    </asp:UpdatePanel>

    il y + de 2000 lignes

    je n'ai pas compris :   Synchrone ou Asynchrone .

    merci

    jeudi 13 mars 2014 12:36
  • Vous avez dans UpdatePanel quelquechose de type:

    <Triggers>

    ici c'est ce qui m'interesse !

    </Triggers>

    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 12:41
  • non je n'ai pas de trigger dans le updatepanel
    • Modifié tiddar jeudi 13 mars 2014 13:08
    jeudi 13 mars 2014 13:06
  • Si vous essayez de naviguer dans la page avec IE sans Debug, quand vous avez l'erreur utilisez détails, quel est le message complet? D'habitude il indique quelque chose :

    Details: Error parsing near ..........


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    jeudi 13 mars 2014 13:25
  • Aussi, dans le Page_Load vous avez déjà :

     ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
      scriptManager.RegisterPostBackControl(this.buttonvaliderajoutform );
    ?


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 14:03
  • non je l'ai enlevé
    jeudi 13 mars 2014 14:17
  • Il y a un raison pour l'enlever?
    Si vous l'ajoutez de nouveau cela fonctionne?


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 14:21
  • lorsque j'ajouter ces   lignes : je reçois la même erreur :

    TextBox_dip.Text.Replace("'", "''");            ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);            scriptManager.RegisterPostBackControl(this.Buttonvaliderajoutform);

    Syntaxe incorrecte vers 'informatique'.
    Ouvrez les guillemets après la chaîne de caractères ',1168699)'.

    jeudi 13 mars 2014 14:33
  • Le TextBox_dip.Text.Replace("'", "''");    vous devez l'ajouter  avant former la requête a envoyer vers SQL.

    CAD :

    Le page_load c'est 

    {

    ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);

    scriptManager.RegisterPostBackControl(this.Buttonvaliderajoutform);

    ......................................................................

    }

    et dans Buttonvaliderajoutform_Click1

      

    protected void Buttonvaliderajoutform_Click1(object sender, EventArgs e)        {      

    ............................

    c.cmd.CommandText = "insert into FormationAcademique (DiplomeObtenu , Annee , Etablissement,Discipline,Langue, PPR) values ('" + TextBox_dip.Text.Replace("'", "''") + "'," + TextBox_annee.Text.Replace("'", "''") + ",'" + TextBox_etab.Text.Replace("'", "''") + "','" + TextBox_discip.Text.Replace("'", "''") + "','" + TextBox_langue.Text.Replace("'", "''") + "'," + Session["Code"] + ")"

    ..............................

    J'espère bien que c'est plus clair maintenant.


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 13 mars 2014 14:45
  • oui c'est clair maintenant  , ça marche :D .. merci à vous :D

    jeudi 13 mars 2014 14:50