none
Decodage de donnees dans unDropDownList RRS feed

  • Question

  • Je besoin de decoder des informations dans un DropDownList qui est alimenté par une source de donnees. au faite a l'enregistrement de la donnee afin d'eviter les casts de la requette, J'ai encode l'information avec  HttpUtility.HtmlEncode() et J'ai besoin maintenant de la decoder avant son affichage dans le DropDownList. Aviez vous une solution pour moi? Merci..
    mardi 6 septembre 2011 09:24

Réponses

  • Le problème est qu'il faut doubler les apostrophes sinon on génère :

    UPDATE MaTable SET Nom='O'Brian' ce qui est syntaxiquement incorrect (au lieu de UPDATE MaTable SET Nom='O''Brian' qui est correct). Pour \, il est mis en dur dans le code ou entré par l'utilisateur ? (si dans du code c# c'est un caractère d'échappement, sinon je ne vois pas pourquoi cela ne passe pas). Il faudrait voir le message d'erreur.

    Le plus simple est d'utiliser des requêtes paramétrées :

    UPDATE MaTable SET Nom=@Nom
    


     et ensuite on définit le paramètre @Nom au niveau du SqlCommand. Dans ce cas les valeurs sont transmises automatiquement sous une forme qui convient (y compris par exemple pour les dates ou les nombres décimaux) au lieu d'être obligé de prendre en charge soi-même le formatage correct pour l'insérer dans la chaine qui constitue l'instruction SQL Server.

    Cela supprimera le besoin d'encoder toutes ces valeurs.

    Plus généralement je pense que contourner une erreur sans la comprendre est souvent une mauvaise idée. On risque alors comme ici, de s'engager sur un chemin qui va lui même poser ses propres problèmes, difficultés et lourdeurs alors que l'erreur peut être assez simple à corriger une fois que l'on comprends son origine.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 15:59
    Modérateur

Toutes les réponses

  • Bonjour,

    La documentation de la classe que vous utilisez déjà (http://msdn.microsoft.com/fr-fr/library/system.web.httputility.aspx ?) indique une méthode HtmlDecode. Vous ne la voyez pas non plus dans l'intellisense de VS ?

    Accessoirement si les données sont bien stockées dans la base sous une forme encodée, je crains que cela ne soit pas une bonne idée : je ne vois pas quel est ce "cast de la requête" que cela permet d'éviter (si on veut dire que cela évite d'encoder les données, la plupart des contrôles le font automatiquement) et cela va compliquer par contre TOUTES les manipulations de ces données.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 11:38
    Modérateur
  • au faite J'avais un probleme lors de l'enregistrement des donnees dans ma base de donnees;

    si j'essai de mettre des " ' " (appostrophe) ou  des " \ "..... dans mes donnees cela casse ma requette et ca me donne un code d'eureur sans faire l'operation d'enregistrement. C'est de ce fait que j'ai passé la classe HtmlEncode a toutes mes variable avant de les passes a mon value de la requette SQL d'insertion et aussi HtmlDecode au moment d'affichage des données des données dans une cellule pour une operation de modiffication. Mais je ne sais si Cest la methode approprié? puisque ca fait que toutes mes donnees sont encoder dans la base de donnees et decoder a l'affichage seul les DropDownList avec lesquels je n'arrive pas a decoder avec HtmlDecode.

    Existe t'il une autre methode pour eviter ce type de cast de requette sans encoder la donnees dans la base de donnees?


    sugmados Développeur ASP.Net
    mardi 6 septembre 2011 14:43
  • Le problème est qu'il faut doubler les apostrophes sinon on génère :

    UPDATE MaTable SET Nom='O'Brian' ce qui est syntaxiquement incorrect (au lieu de UPDATE MaTable SET Nom='O''Brian' qui est correct). Pour \, il est mis en dur dans le code ou entré par l'utilisateur ? (si dans du code c# c'est un caractère d'échappement, sinon je ne vois pas pourquoi cela ne passe pas). Il faudrait voir le message d'erreur.

    Le plus simple est d'utiliser des requêtes paramétrées :

    UPDATE MaTable SET Nom=@Nom
    


     et ensuite on définit le paramètre @Nom au niveau du SqlCommand. Dans ce cas les valeurs sont transmises automatiquement sous une forme qui convient (y compris par exemple pour les dates ou les nombres décimaux) au lieu d'être obligé de prendre en charge soi-même le formatage correct pour l'insérer dans la chaine qui constitue l'instruction SQL Server.

    Cela supprimera le besoin d'encoder toutes ces valeurs.

    Plus généralement je pense que contourner une erreur sans la comprendre est souvent une mauvaise idée. On risque alors comme ici, de s'engager sur un chemin qui va lui même poser ses propres problèmes, difficultés et lourdeurs alors que l'erreur peut être assez simple à corriger une fois que l'on comprends son origine.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 6 septembre 2011 15:59
    Modérateur