J'ai trouvé une solution de contournement pour cette erreur, mais je suis maintenant vraiment curieux de savoir pourquoi cela se produirait, se demandait si quelqu'un d'autre a eu cette erreur.
Ma fonction est la suivante: P>
rating = decimal.Parse("4.0");
5 Réponses :
Cela ne semble pas étrange pour moi du tout. p>
La seule mise en garde possible est la localisation. Si Enfin, lors de cette conversion du lecteur de données, vous devez prendre en compte la colonne source du lecteur de données. Si cela pourrait déjà être une décimale. Pourquoi le convertir en une chaîne uniquement pour le convertir? P> décimal.parse () code> est supposé em> lancer une exception pour les mauvais formats.
décimal.tryparse () code> ne jettera pas cette exception, mais revient plutôt faux. Le kicker est que vous ne vérifiez pas la valeur de retour de
décimal.trypsarse () code>. Em> Je vais vous donner de vraies bonnes chances que
décimal.trypsarse () code> retourne false pour chaque entrée qui provoque une exception avec
décimal.parse () code> et true partout ailleurs. Et quand
décimal.trypsarse () code> renvoie false, l'argument de sortie est toujours "0". P>
décimal.parse () code> se plaint d'une entrée apparemment normale, vous pouvez vérifier si le format de numéro (culture actuelle) utilisé sur votre serveur utilise une virgule plutôt qu'une décimale pour séparer le coefficient de la Mantissa. . Mais étant donné que votre test "4.0" a fonctionné bien, je doute que c'est le problème. P>
Vous dites ceci:
// this works absolutly fine?! decimal _rating = 0; decimal.TryParse(DataReader["Rating"].ToString(), out _rating);
Changez votre trypairse et réessayez:
if (!decimal.TryParse(DataReader["Rating"].ToString(), out _rating)) { throw new Exception("Input string was not in a correct format"); }
La colonne décimale SQL n'utilisera pas une chaîne pouvant convertir en une décimale, alors la tryparse reviendra fausse. Essayez quelque chose comme ceci:
Merci, cela a été utile lorsque je passais du chargement d'un jeu de données (qui obtenait une exception exceptionnelle) à l'aide d'un digne d'information. Je l'ai fait comme suit: décimaldata = (convert.isdbnull (lecteur ["décimalcolumn"]))? 0: Reader.GetDecimal (Reader.GetOgordinal ("Decimalcolumn")); Code>
Je suis confronté au même problème aujourd'hui.
Essayez ceci: Il vous donnera la même erreur. P> La raison derrière ceci est la culture. Dans la culture française, 4,0 est représenté comme 4,0, et donc il jette une exception. P>
décimal.trypsarse code> est la méthode de la culture invariante et donc cela fonctionne bien que cela fonctionne. p> p>
décimal.trypsarse ("4.0", chiffres.number, cultureinfo.invarianTculture, note de sortie); code>
Pourquoi ne pas avoir la colonne être numérique, il n'ya donc pas besoin d'analyser?