-
Fonction string replace
Bonjour,
J'ai longtemps développé en VB et je débute en C#.
j'ai une chaine de caractères que je recherche dans une base de données tout se passe bien sauf quand il y a une apostrophe dans la chaine de caractères.
sous VB j'ajoutais un caractère d'echapement "\" avec la fonction replace.
Ici quand je fais
Code:
str_NomFicSeul = str_NomFicSeul.Replace("'", "\'");
ça ne replace pas.
quand je fais
Code:
str_NomFicSeul = str_NomFicSeul.Replace("a", "\'");
la fonction ajoute bien un \ devant le a.
quelqu'un peut m'expliquer pourquoi ?
-
Dans une chaine de caractère en VB, le caractère \ n'a aucune signification, c'est un caractère banal.
En C#, langage de la famille des C, le caractère \ a une signification très particulière puisqu'il s'agit du caractère d'échappement.
Si tu le rajoute dans une chaine, il ne sera pas traité comme caractère, mais bien comme l'échappement. Si tu veux qu'il soit traité comme caractère, tu as 2 solutions :
- soit l'échapper lui-même, en le doublant, donc
Code:
str_NomFicSeul = str_NomFicSeul.Replace("a", "\\'");
- soit indiquer que, dans cette chaine de caractères, il ne faut pas interpréter les caractères spéciaux, mais les considérer comme simples caractères. Dans ce cas, on fait précéder la chaine d'un @ :
Code:
str_NomFicSeul = str_NomFicSeul.Replace("a", @"\'");
-
Merci de ton aide,
tu as raison j'avais essayé "\\'" et l'espion qui m'affichait \\' alors que la chaine contient bien \'
C'est la même chose avec @"\'"
Mais ça n'a pas résolu mon bug.
Ma string c'est "Babay's" je cherche si elle existe dans un recordset avec cette commande.
Code:
Lig_Fic = dst_Rep.Tables["Fic"].Select("FicNom Like '" + str_NomFicSeul + "' ");
comme il y a un <'> dans la chaine ça ne fonctionne pas.
j'essaie donc d'ajouter le <\> devant le <'> dans ma chaine de caractère mais j'ai toujours une erreur :
System.Data.SyntaxErrorException*: 'Erreur de syntaxe : opérande manquant après l'opérateur 's'.'
-
J'ai trouvé en fait dans
Code:
Lig_Fic = dst_Rep.Tables["Fic"].Select("FicNom Like '" + str_NomFicSeul + "' ");
le caractère ' doit être échapé par lui même.
c'est donc
Code:
str_NomFicSeul = str_NomFicSeul.Replace("'", "''");
Qui a résolu le pb.
Je passe au suivant c'est les crochets maintenant qui coincent.
-
En fait j'ai contourné le probléme et remplaçant le Like par un =
Code:
Lig_Fic = dst_Rep.Tables["Fic"].Select("FicNom = '" + str_NomFicSeul + "' ");