Float ou decimal transformer en string :s [Résolu]

Messages postés
13
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
3 juin 2013
- - Dernière réponse : nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
- 29 sept. 2009 à 17:10
Bonjour tout le monde,

Voilà mon problème ça à l'air assez simple pourtant je dois avouer avoir du mal

Je souhaite effectuer une requete d'update dans une base de donnée sqlserver 2005

en simplifiant ma tabe reprend 3 champs

Id_item : int
Name_item : varchar
Prix : decimal

mon soucis est que lorsque j'effectue une requete sous la forme :

string request "UPDATE Item SET Name_item '" + Name_item + "',Prix = " + Prix + " WHERE Id_item = '" + Id_item + "'";

avec comme variables:

int Id_item = 1
string Name_item = "NomItem"
decimal Prix = 25.33

le soucis est que lors du débuging la valeur de prix est bien 25.33 mais une fois passé à ma requete il se transforme en 25,33 et donc me renvoi une erreur

Je ne comprend pas trop d'où viens cette transformation, j'ai également essayé de le changer en float même problème une fois dans ma requete le "." devient ","

Quelqu un aurait il une idée ?

Merci d'avance

Beluzzo
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
13
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
3 juin 2013
3
Merci
Bon ben j'ai trouvé une solution pour contourner ce problème, je dis pas que c'est la meilleure mais le resultat est bon

j'ai modifié le type de mon champ prix en float (car sinon je perdait la virgule, certainement lié à mon programme et une transformation dans celui-ci)

là j'envoi directement une string à ma requete et j'utilise la fonction
Prix = REPLACE('" + Prix + "',',','.') ce qui tranforme ma virgule en point.

Cela pourra tjs dépanner certains.

Beluzzo

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Beluzzo
Messages postés
13
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
3 juin 2013
0
Merci
Petite précision

mon décimal est en réalité un decimal.parse("25,33")

mais ma valeur dans ma variable est bien 25.33

Beluzzo
Commenter la réponse de Beluzzo
Messages postés
1163
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
12
0
Merci
Le probleme vient du fait que les settings régionaux de machine sont tels que les décimaux sont représentés avec la virgule (format francais), alors que ta DB l'est avec la point(format US). Tu as trois solutions :

1 - changer les settings de ta DB ou de ton OS (pas très fiable)
2 - Lorsque tu passe le prix a ta requete, faire un string.format dessus pour t'assurer que c'est bien un . qui sera utilisés. Fiable mais pas encore top
3 - utiliser les requetes paramétrées (la meilleure solution). Il existe des tutos la dessus. Le mieux reste encore d'utiliser des dataset qui vont gérer tout ca pour toi
Commenter la réponse de leprov
Messages postés
13
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
3 juin 2013
0
Merci
Salut leprov et merci pour ta réponse.

J'ai effectivement essayé de passer par des requetes paramétrées cependant je dois travailler avec une connexion odbc (hélas) et malgré le fait d'ajouté de "?" il me mettait toujours le même genre d'erreur (impossible de transformer un varchar en float).
Je suppose donc que dans mon cas la solution se trouvait plutôt dans les autres possibilitées que tu as cité.

Merci quand même

Beluzzo
Commenter la réponse de Beluzzo
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Salut,

Peux-tu mettre comment tu as déclaré ton parametre de la requete paramétrée.

Car normalement il y a pas de probleme, et les requetes sont faites justement pour eviter ce genre de probleme.

string request "UPDATE Item SET Name_item ?,Prix = ? WHERE Id_item = ?";

C'est bien ta requete?
Il ne faut pas mettre

plus d'info ici

Bon dev
Commenter la réponse de nhervagault