Bonjour j ai un textbox de type text et qui insere sa valeur dans la bd mais quand je met un apostrophe ridn ne passe pourquoi a votre avis .
Bonjour j ai un textbox de type text et qui insere sa valeur dans la bd mais quand je met un apostrophe ridn ne passe pourquoi a votre avis .
Généralement lorsque l'on pose une question de ce genre, il est beaucoup plus facile d'obtenir des réponses en mettant du code.
Par exemple comment tu récupère la valeur de ton textbox, comment tu insère cette valeur en base, etc...
Sans ça, je vais juste lancer une idée : tu ne traite pas la chaine de caractères que tu récupère de ta textbox et tu essaie de l'insérer directement en base. L'apostrophe représentant généralement la fin d'une instruction pour les SGBD, ce dernier ne fait pas ce que tu attends (retourne une erreur non catché, ne fais rien, etc...)
Regarde de ce côté la, ou montre nous du code
merci pour votre reponse, voila ce que je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 string InsertQ = "INSERT INTO table VALUES('" + nmStation.Text + "', '" + latitude.Text + "','" + longitude.Text + "','" + observ.Text.ToString() + "');"; SqlCommand MyCmd = new SqlCommand(InsertQ, connection); MyCmd.ExecuteNonQuery();comme j'ai signalé il me bloque quand je saisie une chaine avec "'", tel que : "...n'a pas "
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <p><label>Observations : </label></p> <p><asp:TextBox ID="observ" MaxLength="200" Rows = "10" Columns="10" Height="50px" TextMode="MultiLine" runat="server" CssClass="input"></asp:TextBox></p>
A priori ça confirme ce que je pensais.
Mais c'est quelque chose d'assez courant et il est plus intéressant pour toi de savoir corriger ce genre d'erreur de toi même.
Donc si tu le veux bien, on va y aller pas à pas.
Il faut que tu décompose les différentes actions de ton code :
- Tu récupère les valeurs de plusieurs textbox
- Tu crée une chaine de caractères, qui est la concaténation des valeurs récupérées précédemment
- Tu crée une requête SQL avec la chaine de caractères et une variable de connexion
- Tu exécute ta requête
On va donc vérifier que chaque étape s'effectue correctement.
1) En partant du principe que tu connais le fonctionnement du débuggeur de Visual Studio, met un point d'arrêt au niveau de ton code :
et regarde la valeur de chaque textbox.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 string InsertQ = "INSERT INTO table VALUES('" + nmStation.Text + "', '" + latitude.Text + "','" + longitude.Text + "','" + observ.Text.ToString() + "');";
2) Si tout est conforme à tes attentes, avance d'un pas et regarde la valeur de requête SQL, c'est à dire de ta chaine "InsertQ".
Quand tu travail avec une base de données, le mieux pour débugger est de prendre ta requête et de l'exécuter directement sur ta base, pour voir si elle marche bien (en environnement de test c'est mieux )
Donc tu prends la valeur de "InsertQ", tu l'exécute sur ta base. Cela donne t il le résultat attendu ?
3) Si tout est bon jusque la, le problème peut venir de tes informations de connexions. On avance encore d'un pas avec le débuggeur et on vérifie la variable "connection". Vérifie que tout est bon.
Avance encore d'un pas pour t'assurer qu'il n'y a pas d'erreur dans la création de ta commande SQL (erreur de syntaxe au niveau des arguments, etc...).
As tu bien ouvert ta connexion en amont ?
4) Si toutes les étapes précédentes sont OK, il ne te reste plus qu'a tester l'exécution en elle même. Voir si le débuggeur te retourne quelque chose.
J'ai fais exprès de détailler la vérification pour chaque étapes pour te montrer les automatismes à avoir pour trouver d'où vient le problème.
Mais vu que tu explique que cela marche s'il n'y a pas d'apostrophes dans ton textbox, tu peux facilement isoler l'étape qui doit être en cause.
Dis moi si cela t'aide ou si tu ne vois toujours pas d'où peux venir le problème.
Le message d'Arnaud est parfait et explique clairement la méthodologie que l'on devrait toujours appliquer pour la résolution d'un problème.
Mais ton problème ici concerne bien les "quotes" (').
Il faut vraiment éviter(pour ne pas dire qu'il ne faut pas) d'écrire des requêtes en dur (SELECT * FROM matable WHERE macolonne='valeurColonne')
Des qu'il y aura une quote tu rencontrera des problèmes et d'Injection_SQL
Il y a la solution de doubler ou tripler les quotes (je ne sais plus et je n'utilise plus cette façon de faire depuis très très très longtemps)
Voici un tutoriel pour utiliser les requêtes paramétrées :
Sql Parameter
Avec cette solution plus besoin de s'occuper des quotes.
Bonjour
Perso je préfère utiliser les parameters
exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM COMMANDE WHERE CMD_ID = @CdeId", conn) cmd.Parameters.Add("@CdeId", SqlDbType.UniqueIdentifier).Value = CdeId
Salut,
Il faut IMPERATIVEMENT ne jamais concaténer des valeurs provenant de saisie utilisateur. Cela ouvre la porte à des injections SQL.
Préfère donc la solution avec paramètres, voire mieux, procédure stockée paramétrée.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager