Convertir un string en decimal

Le
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 !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jerome
Le #19368521
En ASP .NET je ne sais pas mais en VB j'utilise une fonction StrToVal qui
envoie le contenu des Textbox vers SQL Server et il n'y a pas de problème.


Public Function StrToVal(ByVal z_S1 As Variant) As Double
Dim z_S2 As String
Dim z_I1 As Integer

If IsEmpty(z_S1) Then StrToVal = 0: Exit Function
If IsNumeric("1,1") Then
If InStr(z_S1, ".") <> 0 Then Mid$(z_S1, InStr(z_S1, "."), 1) = ","
End If
If IsNumeric(z_S1) = False Then StrToVal = 0: Exit Function
If InStr(z_S1, ",") <> 0 Then Mid$(z_S1, InStr(z_S1, ","), 1) = "."
If InStr(z_S1, " ") <> 0 Or InStr(z_S1, Chr$(160)) <> 0 Then
z_S2 = ""
For z_I1 = 1 To Len(z_S1)
If Mid$(z_S1, z_I1, 1) <> " " And Asc(Mid$(z_S1, z_I1, 1)) <>
160 Then z_S2 = z_S2 & Mid$(z_S1, z_I1, 1)
Next
z_S1 = z_S2
End If
StrToVal = Trim$(Val(z_S1))
End Function

"Olivier" 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 !


Bl
Le #19375211
Bonjour,

essaie de ne pas convertir en decimal avant d'écrire la requête. Si ton
système est en français, le séparateur est, par défaut, la virgule.

En espérant que cela puisse t'aider ...

---
@go


"Olivier" wrote:

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 !


Bl
Le #19375331
Autre idée, utilise le cultureinfo correspondant à la version de ton serveur
SQL (si les culture sont différentes).


string s = "34,23";
Decimal d = Decimal.Parse(s);

// Je suppose que ta BDD est en francais, ca peut etre en_US, ...
// tu as les correspondance dans l'aide
System.IFormatProvider format = new System.Globalization.CultureInfo(
"fr-FR", true );

string query = String.Format( "INSERT INTO MaTable(MonChamps) VALUES({0})",
d.ToString(format) );

Je pense que cela devrait fonctionner ...

---
@go


"@go" wrote:

Bonjour,

essaie de ne pas convertir en decimal avant d'écrire la requête. Si ton
système est en français, le séparateur est, par défaut, la virgule.

En espérant que cela puisse t'aider ...

---
@go


"Olivier" wrote:

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


Fred BROUARD
Le #19381551
Olivier a écrit :
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";


Rajouter un replace en tranformat le "," en "."
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 !



A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
WOLO Laurent
Le #19565311
Faire un replace de la virgule en . (utiliser la fonction replace)
string s="34,23".replace(",",".");
string query = "INSERT INTO MaTable(MonChamps) VALUES(" + s + ")";

"Olivier" 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 !


Publicité
Poster une réponse
Anonyme