Gwendo69
Messages postés147Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention28 juin 2013
-
16 juin 2009 à 10:51
Gwendo69
Messages postés147Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention28 juin 2013
-
16 juin 2009 à 16:00
Bonjour,
j'ai un formulaire avec des zones de texte. J'ai besoin de convertir les valeurs inscrites dedans en décimal pour pouvoir les insérer dans ma base de données.
J'ai essayé avec Convert.ToDecimal, rien à faire ça ne marche pas.
Du coup j'ai utilisé "Parse" avec using System.Globalization. Voici le code:
decimal carb = decimal.Parse(txt_Carburant.Text, System.Globalization.CultureInfo.InvariantCulture);
decimal pea = decimal.Parse(txt_Peage.Text, System.Globalization.CultureInfo.InvariantCulture);
decimal loc = decimal.Parse(txt_location.Text, System.Globalization.CultureInfo.InvariantCulture);
//TRAVAIL SUR LA BASE
SqlCommand insert = new SqlCommand("INSERT INTO frais
(carburant,nb_litre,peage_autoroute,km_mois,cout_location,mois,numero_immatriculation)
VALUES ('" + carb + "', '" + txt_NbLitres.Text + "','" + pea + "','" + txt_KmMois.Text + "','" + loc + "','" + cbx_mois.Text + "','" + cbx_NumeroImmat.Text + "')", cnxsql.MyConnection);
insert.ExecuteNonQuery();
Les données s'insèrent bien dans la table, mais la virgule est "oubliée". Quand je met 1,23 j'ai 123 dans la table.
Est-ce que quelqu'un sait pourqoi et si il y a une autre solution? Merci d'avance.
Gwendo.
A voir également:
String to decimal c#
Convert string to decimal c# - Meilleures réponses
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 juin 2009 à 15:29
La culture, c'est la différence de format selon les pays.
En France, un nombre à "virgule" s'écrit 12,3. En Angleterre, il s'écrira 12.3.
En France, une on écrit les dates ainsi : 31/12/2009. En Angleterre (pas sûr à 100% de moi) 12-31-2009.
Donc la conversion vers/depuis un string dépend de la culture.
Quant au fait que des nombres soient arrondis dans ta base de données, la seule raison que je vois est que des champs "décimaux" dans ta base ont une précision de 0 chiffre après la virgule ;-)
Il te faut donc modifier le type / la précision des champs de ta base de données.
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Gwendo69
Messages postés147Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention28 juin 2013 16 juin 2009 à 16:00
MERCI! MERCI! MERCI!
ça marche enfin. Les lignes de code ne génèrent plus aucune erreur et en mettant l'échelle à deux (je n'avais pas vu, elle était à 0), les chiffres après la virgule sont pris en compte. En plus, j'aurais appris ce qu'est une culture.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 juin 2009 à 11:12
quand tu dis que Convert.ToDecimal() ne fonctionne pas, qu'est-ce qui se passe ?
Quand à ta requête SQL, utilise des requêtes paramétrées, il va gérer tout seul les types :
commande.CommandText "INSERT INTO Table SET monChamp @MonParam WHERE monChamp2 = @monParam2";
commande.Parameters.Add(new SqlParameter("@MonParam", maVariable));
commande.Parameters.Add(new SqlParameter("@MonParam2", maVariable2));
Avec cette méthode, ça fonctionne que maVariable et maVariable2 soient des string, int, DateTime, bool, decimal...
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 juin 2009 à 11:16
Enfin, bien sûr, il faut que le type de maVariable corresponde au type de monChamp et que maVariable2 corresponde au type de monChamp2.
Mais l'avantage, c'est que tu n'as pas à te soucier de mettre des ' ou non, il s'en chargera.
Ah, et je me suis planté dans ma requête, j'ai confondu l'INSERT avec l'UPDATE (désolé :) )
INSERT INTO Table (monChamp, monChamp2) VALUES (@MonParam, @MonParam2);
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Gwendo69
Messages postés147Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention28 juin 2013 16 juin 2009 à 11:55
Bonjour,
Merci de prendre le temps de regarder ça.
Lorsque j'utilise "decimal carb = Convert.ToDecimal(txt_Carburant.Text);"
j'ai cette erreur: "Erreur de conversion du type de données varchar en numeric."
Sinon, j'ai vérifier dans ma table, les champs sont bien en decimal.
Je vais essayer ta méthode même si j'ai pas tout compris.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 juin 2009 à 12:06
"Erreur de conversion du type de données varchar en numeric." c'est parce que tu mets des ' autour de ta valeur dans ta requête je pense.
Mais utilise les requêtes paramétrées, comme je t'ai dit. C'est très simple : tu insères @UnNomAuChoix dans ta requête (sans ', ni #, ni rien), puis tu fais commande.Parameters.Add(new SqlParameter(leNomQueTuAsDonne /* en l'occurrence "@UnNomAuChoix" */, laValeur));
Et lors de l'exécution de ta requête, il s'occupera automatiquement du formatage de ton paramètre dans ta requête, selon le type de laValeur.
Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Gwendo69
Messages postés147Date d'inscriptionlundi 29 septembre 2008StatutMembreDernière intervention28 juin 2013 16 juin 2009 à 15:00
Merci pour vos réponses.
Mais en regardant bien, j'ai l'impression que ça arrondi le nombre sans prendre en compte les chiffres après la virgule. Quand j'ai 12,3 ça marque 12 et si je met 12,98 ça met 13. Le problème viendrait de là? En tout cas y a plus de message d'erreur.
Au final j'ai ça:
SqlCommand insert = new SqlCommand ("INSERT INTO frais(carburant,nb_litre,peage_autoroute,km_mois,cout_location,mois,numero_immatriculation)
VALUES (@carburant,@litres,@peage,@km,@location,@mois,@immat)", cnxsql.MyConnection);