Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Convertir un string en decimal

2 réponses
Avatar
Olivier
Bonjour,

Je travaille sur une interface ASP .NET contenant plusieurs TextBox.
L'utilisateur doit saisir des valeurs décimales dans certaines TextBox. Les
données sont ensuite envoyées dans une table SQL Server.

Le problème que je rencontre est le suivant : l'utilisateur saisit une
valeur mais l'insertion dans la base ne fonctionne pas car le séparateur "."
est systématiquement remplacé par "," (vérification via SQL Server Profiler).

J'ai tenté de faire un Convert, un Parse, de modifier les paramètres de
globalisation via la classe CultureInfo, d'apporter une modification au
niveau du fichier de configuration avec l'élément globalization et de
modifier tout un tas de paramètres mais rien n'a résolu mon problème.

Voici un extrait du code (version avec une conversion classique) qui pose
problème :

1: string s = "34,23";
2: decimal d = Convert.ToDecimal(s);
3: string query = "INSERT INTO MaTable(MonChamps) VALUES(" + d + ")";

J'ai l'impression que le problème vient de la ligne 1 car lorsque
j'initialise la chaîne s à "34.23" (ce qui me semble cohérent pour un
decimal), j'obtiens une l'erreur de compilation suivante :
System.FormatException: Le format de la chaîne d'entrée est incorrect.

Par avance, je vous remercie pour vos idées !

2 réponses

Avatar
thierry.bip
Salut,

Ton problème ne viendrait pas plutot de la 3ème ligne ?
3: string query = "INSERT INTO MaTable(MonChamps) VALUES(" + d + ")";

pour concaténer la chaine, .Net fait un "ToString()" sur ton double. Le
résultat doit être une chaine avec une virgule comme séparateur de décimal.

Regarde si ToString() ne prendrait pas un paramètres pour que tu ais un "."
comme séparateur de décimal.

@+
-Thierry-




"Olivier" a écrit dans le message de
news:
Bonjour,

Je travaille sur une interface ASP .NET contenant plusieurs TextBox.
L'utilisateur doit saisir des valeurs décimales dans certaines TextBox.
Les
données sont ensuite envoyées dans une table SQL Server.

Le problème que je rencontre est le suivant : l'utilisateur saisit une
valeur mais l'insertion dans la base ne fonctionne pas car le séparateur
"."
est systématiquement remplacé par "," (vérification via SQL Server
Profiler).

J'ai tenté de faire un Convert, un Parse, de modifier les paramètres de
globalisation via la classe CultureInfo, d'apporter une modification au
niveau du fichier de configuration avec l'élément globalization et de
modifier tout un tas de paramètres mais rien n'a résolu mon problème.

Voici un extrait du code (version avec une conversion classique) qui pose
problème :

1: string s = "34,23";
2: decimal d = Convert.ToDecimal(s);
3: string query = "INSERT INTO MaTable(MonChamps) VALUES(" + d + ")";

J'ai l'impression que le problème vient de la ligne 1 car lorsque
j'initialise la chaîne s à "34.23" (ce qui me semble cohérent pour un
decimal), j'obtiens une l'erreur de compilation suivante :
System.FormatException: Le format de la chaîne d'entrée est incorrect.

Par avance, je vous remercie pour vos idées !


Avatar
Fred
in news:, Olivier
wrote :

Bonjour,



Bonjour,

Je travaille sur une interface ASP .NET contenant plusieurs TextBox.
L'utilisateur doit saisir des valeurs décimales dans certaines
TextBox. Les données sont ensuite envoyées dans une table SQL Server.



[...]

Voici un extrait du code (version avec une conversion classique) qui
pose problème :

1: string s = "34,23";
2: decimal d = Convert.ToDecimal(s);
3: string query = "INSERT INTO MaTable(MonChamps) VALUES(" + d + ")";



Utilise des paramètres. Surtout dans ton cas.
Il suffit de saisir un nombre suivi d'un point virgule dans le textbox
pour pouvoir exécuter n'importe quelle requête sur ton serveur.
2;DELETE MaTable

string query = "INSERT INTO MaTable(MonChamps) VALUES(@V)";
cmd.Parameters.AddWithValue("@V", d);

Il est même préférable d'instancier un paramètre du bon type et de la
bonne taille plutôt que d'utiliser le AddWithValue.

Les paramètres résolvent les problèmes des caractères spéciaux, des
différences de format internationaux et évitent l'injection de code SQL.

--
Fred