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

Convertir un string en decimal

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

5 réponses

Avatar
jerome
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" wrote in message
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
Bl
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 !


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


Avatar
Fred BROUARD
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 *************************
Avatar
WOLO Laurent
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" 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 !