Float ou decimal transformer en string :s

Résolu
Beluzzo Messages postés 13 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 3 juin 2013 - 29 sept. 2009 à 13:46
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre 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
A voir également:

5 réponses

Beluzzo Messages postés 13 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 3 juin 2013
29 sept. 2009 à 14:13
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
3
Beluzzo Messages postés 13 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 3 juin 2013
29 sept. 2009 à 13:49
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
0
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
29 sept. 2009 à 14:22
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
0
Beluzzo Messages postés 13 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 3 juin 2013
29 sept. 2009 à 15:44
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
29 sept. 2009 à 17:10
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
0
Rejoignez-nous