0

10 進数の解析に問題があります。この質問が戦利品として尋ねられたことは知っていますが、解決策はどれもうまくいきませんでした。ここで 2 日間立ち往生しています。

私の問題は、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 の種類は何ですか

...

小数だった

...

次に、小数にしたいので、答えが得られます。

ParameterSQLインジェクションとこの問題(小数点区切り)を防ぐために、小数点を渡します。

例 (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);

あなたの問題があなたの文化(私のような)では、コンマが1000ではなく10進数を区切っていることが原因である場合、これで解決します。

また、Damien_The_Unbeliever と Jonh Skeet が言ったように、パラメータ化された SQL を使用してください。

于 2012-11-14T16:03:36.327 に答える