我有十进制解析的问题,我知道这个问题被问到了一个战利品,但没有一个解决方案适合我,而且我已经被困在这里两天了。
我的问题是我的CultureInfo设置为fr_Fr,当我把代码放在下面时,错误显示用逗号分隔十进制而不是句点。
double entree = Convert.ToDouble(row["entree"]);
double sortie = Convert.ToDouble(row["sortie"]);
int id_mw = Convert.ToInt32(row["mouvment_w_id"]);
qte_Stock += entree - sortie;
decimal qte_s ;
MessageBox.Show("" + CultureInfo.CurrentCulture);
qte_s = Decimal.Parse(Convert.ToString(qte_Stock), NumberStyles.Number ^ NumberStyles.AllowThousands);
MessageBox.Show("" + qte_s);
qte.CommandText = "Update tcpos.dbo.Warehouse_mouvement set qte_stock= " + qte_s + " where mouvment_w_id = "+id_mw;
qte.ExecuteNonQuery();
答案 0 :(得分:1)
qte_Stock的类型是什么
...
是小数
...
然后你有答案,因为你想把它变成小数。
将小数作为Parameter
传递,以防止sql注入和此问题(小数点分隔符)。
例如(假设SQL-Server为rdbms):
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand("Update tcpos.dbo.Warehouse_mouvement set qte_stock=@qte_stock where mouvment_w_id = @mouvment_w_id", con))
{
cmd.Parameters.AddWithValue("@qte_stock", qte_stock);
cmd.Parameters.AddWithValue("@mouvment_w_id", id_mw);
con.Open();
cmd.ExecuteNonQuery();
}
答案 1 :(得分:0)
qte_s = qte_Stock.ToString ("#.#", System.Globalization.CultureInfo.InvariantCulture);
这将解决,如果你的问题是因为在你的文化中(像我的一样),逗号会小数点,而不是数千。
另外,使用参数化SQL,如Damien_The_Unbeliever和Jonh Skeet所说。