Echappement dans une requête - C#/.NET managed - Programmation
Marsh Posté le 26-04-2005 à 22:44:40
lalex a écrit : Je souhaite faire quelque chose de très simple : |
En .NET, on n'utilise jamais, mais alors jamais de requête issue d'une bête concaténation Lorgne du côté des paramètres de requête
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...
Je suis plus à 200 pages de cours près.
Merci sinon FlorentG de m'indiquer la voie à chaque post. :>
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
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()
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
Marsh Posté le 27-04-2005 à 14:19:55
Oui tout à fait , 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é".
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...
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??
Marsh Posté le 27-04-2005 à 16:07:58
Les chaîne @ s'échappent tout seule quand t'utilise les SqlParameters justement
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"
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...) ?