Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2783 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Echappement dans une requête

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Echappement dans une requête

n°1061624
lalex
Posté le 26-04-2005 à 17:29:16  profilanswer
 

Je souhaite faire quelque chose de très simple :
 
Voici une requête :
 
"insert into news (texte) value '"+texte+"';
 
où texte = "Salut j'écris une news"
 
 
Ici, la requête va planter, puisque le ' devrait être échappé. Sur la doc, le caractère @ permet normalement de le faire, mais voilà :
 
@"J'écris une news" n'est pas égal pour autant à "J\'écris une news"
 
Quelle est l'astuce et comment feriez-vous pour échapper mon apostrophe (et autres anti-slash etc...) ?

mood
Publicité
Posté le 26-04-2005 à 17:29:16  profilanswer
 

n°1061894
lalex
Posté le 26-04-2005 à 21:02:54  profilanswer
 

Personne pour me dire pq ma chaîne verbatim marche pas ?  :(

n°1061954
FlorentG
Unité de Masse
Posté le 26-04-2005 à 22:44:40  profilanswer
 

lalex a écrit :

Je souhaite faire quelque chose de très simple :
 
Voici une requête :
 
"insert into news (texte) value '"+texte+"';
 
où texte = "Salut j'écris une news"
 
 
Ici, la requête va planter, puisque le ' devrait être échappé. Sur la doc, le caractère @ permet normalement de le faire, mais voilà :
 
@"J'écris une news" n'est pas égal pour autant à "J\'écris une news"
 
Quelle est l'astuce et comment feriez-vous pour échapper mon apostrophe (et autres anti-slash etc...) ?


En .NET, on n'utilise jamais, mais alors jamais de requête issue d'une bête concaténation :o Lorgne du côté des paramètres de requête ;)

n°1062462
lalex
Posté le 27-04-2005 à 11:19:38  profilanswer
 

Bon effectivement, il existe apparement bcps de choses dans ce domaine sous .NET que j'ignorais...  :whistle:  
Je suis plus à 200 pages de cours près.
 
Merci sinon FlorentG de m'indiquer la voie à chaque post. :>
 

n°1062468
FlorentG
Unité de Masse
Posté le 27-04-2005 à 11:21:22  profilanswer
 

Pour vous servir :jap: :D

n°1062504
pikti
I’ve done worse
Posté le 27-04-2005 à 11:39:16  profilanswer
 

il suffit de doubler la côte (' -> '')

n°1062508
FlorentG
Unité de Masse
Posté le 27-04-2005 à 11:42:08  profilanswer
 

... T'as tout pigé toi :D

n°1062631
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 27-04-2005 à 13:20:26  profilanswer
 

pikti a écrit :

il suffit de doubler la côte (' -> '')


...et multiplions les risques de SQL injection :sarcastic:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1062654
pikti
I’ve done worse
Posté le 27-04-2005 à 13:35:59  profilanswer
 

pas s'il appelle une proc stock qui exécute sa proc passée en paramètre :)
 
edit: et sinon la concaténation avec "+" çai mal  :)
mieux vaut utiliser System.Text.StringBuilder ou string.Format()


Message édité par pikti le 27-04-2005 à 13:48:37
n°1062735
FlorentG
Unité de Masse
Posté le 27-04-2005 à 14:14:45  profilanswer
 

T'as pas pigé. En .NET, on créer un objet genre SqlCommand, avec à la place des champs des paramètres. Après via la collection Parameters du SqlCommand, on définit la valeur de chaque paramètre :)

mood
Publicité
Posté le 27-04-2005 à 14:14:45  profilanswer
 

n°1062748
pikti
I’ve done worse
Posté le 27-04-2005 à 14:19:55  profilanswer
 

Oui tout à fait  :jap: , de plus c'est quand même plus sympa d'utiliser des proc stock.  
 
Simplement, parfois tu as besoin de construire dynamiquement ta proc, et dans ce cas une jolie StringBuilder passé un paramètre d'une procédure stockée se contentant de faire un exec, en ayant préalablement doublé les côtes, fonctionne très bien :)
 
 
edit: en bref vous avez bien entendu raison, je fais référence à un cas particulier vécu et répond simplement à "comment échapper un caractère protégé".


Message édité par pikti le 27-04-2005 à 14:26:15
n°1062936
lalex
Posté le 27-04-2005 à 15:58:06  profilanswer
 

Hum, je bosse avec une base MySQL là, donc les procédures stockées, on oublie. :)
Sinon, n'étant pas spécialement familié avec Visual Basic, et m'étant mis à C# il y a à peine 2 semaines, je me suis coltiné que de la doc ou presque, et dans le cours de 250 pages que je me suis farci pour l'instant, l'accès à la BD se faisait un peu 'oldschool', cad avec une concaténation de valeurs dans une requête et envoie du tout dans un ExecuteReader() ou ExecuteNonQuery().
 
Voilà, d'où ma question plus haut.
 
Par contre, quelque chose qui m'échappe tjs, bien que ma méthode est un peu désuète, je vois pas pq ça marche pas. Les chaînes verbatim là (avec le @) sont censées échapper toutes seules les caractères qui posent problèmes (enfin c'est ce que mon cours laisse supposer !), mais rien n'y fait.
 
Ya une erreur de syntaxe ou alors le @ ne fait pas ce que j'imagine ?
 
J'aurais aimé un équivalent de addslashes()/stripslashes() en PHP pour ceux qui connaissent.
 
Sur ce, vais continuer ma lecture sur les dataset...

n°1062948
cesarr89
Posté le 27-04-2005 à 16:07:34  profilanswer
 

Putain pourquoi j'ai pas ce poblème du tout alors que je fais la même chose??

n°1062951
FlorentG
Unité de Masse
Posté le 27-04-2005 à 16:07:58  profilanswer
 

Les chaîne @ s'échappent tout seule quand t'utilise les SqlParameters justement

n°1062990
lalex
Posté le 27-04-2005 à 16:26:57  profilanswer
 

Vi, je me doute.
 
Sinon, après moultes tests, en fait j'imaginais qu'un @ échappait tout, mais ça n'échappe que les \n et autres...
Ca me semble étrange qu'aucune fonction ne soit capable de faire toute seule "Salut c'est moi" => "Salut c''est moi"
 

n°1062993
FlorentG
Unité de Masse
Posté le 27-04-2005 à 16:27:28  profilanswer
 

Si, les SqlParameters le font ;)

n°1063051
lalex
Posté le 27-04-2005 à 17:03:26  profilanswer
 

hehe, ok j'insiste plus  :wahoo:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Echappement dans une requête

 

Sujets relatifs
requete sql asynchronerequete boucle dans plan de salle
Convertir requête Select en requête Updatecompter les éléments d'une requête
Requête SQL pour accessIF dans Requête SQL
[PostgreSQL] Requête peu couteuse ?Jointure Requête SQL
Requete SQL - TOP10requête union SQL
Plus de sujets relatifs à : Echappement dans une requête


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR