0

我有十进制解析的问题,我知道这个问题被问了一个战利品,但没有一个解决方案对我有用,而且我已经在这里呆了两天了。

我的问题是我的 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();
4

2 回答 2

1

qte_Stock 的类型是什么

...

这是一个小数

...

然后你就有了答案,因为你想把它变成小数。

传递小数Parameter以防止 sql-injection 和此问题(小数分隔符)。

例如(假设 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();
}
于 2012-11-14T16:04:10.460 回答
0
qte_s = qte_Stock.ToString ("#.#", System.Globalization.CultureInfo.InvariantCulture);

如果您的问题是因为在您的文化中(如我的文化),这将解决,逗号分隔小数,而不是千位。

此外,使用参数化 SQL,如 Damien_The_Unbeliever 和 Jonh Skeet 所说。

于 2012-11-14T16:03:36.327 回答