Echappement dans une requête

Echappement dans une requête - C#/.NET managed - Programmation

Marsh Posté le 26-04-2005 à 17:29:16    

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...) ?

Reply

Marsh Posté le 26-04-2005 à 17:29:16   

Reply

Marsh Posté le 26-04-2005 à 21:02:54    

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

Reply

Marsh Posté le 26-04-2005 à 22:44:40    

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 ;)

Reply

Marsh Posté le 27-04-2005 à 11:19:38    

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. :>
 

Reply

Marsh Posté le 27-04-2005 à 11:21:22    

Pour vous servir :jap: :D

Reply

Marsh Posté le 27-04-2005 à 11:39:16    

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

Reply

Marsh Posté le 27-04-2005 à 11:42:08    

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

Reply

Marsh Posté le 27-04-2005 à 13:20:26    

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)
Reply

Marsh Posté le 27-04-2005 à 13:35:59    

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
Reply

Marsh Posté le 27-04-2005 à 14:14:45    

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 :)

Reply

Marsh Posté le 27-04-2005 à 14:14:45   

Reply

Marsh Posté le 27-04-2005 à 14:19:55    

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
Reply

Marsh Posté le 27-04-2005 à 15:58:06    

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...

Reply

Marsh Posté le 27-04-2005 à 16:07:34    

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

Reply

Marsh Posté le 27-04-2005 à 16:07:58    

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

Reply

Marsh Posté le 27-04-2005 à 16:26:57    

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"
 

Reply

Marsh Posté le 27-04-2005 à 16:27:28    

Si, les SqlParameters le font ;)

Reply

Marsh Posté le 27-04-2005 à 17:03:26    

hehe, ok j'insiste plus  :wahoo:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed