0

mysql データベースにテーブル EXPENSES があり、列の 1 つは型が decimal(10,2) の AMMOUNT です。データベースに値を挿入するために使用されるテキストボックスを備えた C# (winforms) のアプリケーションがあります。

string initialquery = "INSERT INTO EXPENSES (ID, E_DATE, AMMOUNT, PERSON, COMMENTS, T_ID) " +
                            "VALUES ('" + id + "', '" + date.ToString("yyyy:MM:dd") + "', '" + ammount + "', '" + person + "', '" + comments + "', '" + tid + "')";
        //yyyy:MM:dd hh:mm:ss
        myMySqlConnection.Open();
        MySqlCommand command1 = new MySqlCommand(initialquery, myMySqlConnection);
        command1.ExecuteNonQuery();
        if (lang == 2)
            MessageBox.Show("ΤΑ ΔΕΔΟΜΕΝΑ ΑΠΟΘΗΚΕΥΤΗΚΑΝ");
        else if (lang == 1)
            MessageBox.Show("DATA SAVED");
        myMySqlConnection.Close();

問題は地域設定に関係しています。フォーマットをGREEKに設定した場合。小数点記号は「,」です。「、」を使用して 10 進数値を挿入しようとすると、受け入れられません (40,5 ではなく 405 として格納されます)。小数点記号を「.」に設定した場合 テキストボックスに40.5が正しく保存されています。地域設定を英語に設定し、10 進数値を「,」に設定すると、再び機能しません。10 進数は、小数点記号が "." の場合にのみ受け入れられるようです。これはよくわかりません。「、」を小数点演算子として受け入れるようにするにはどうすればよいですか?

敬具 ジョージ・ジョルジウ

4

3 に答える 3

0

開発マシンの地域設定を設定したと思いますが、SQL Server はまだ en-us モードなので、SQL サーバーの地域設定も変更してください。

あなたが望むようにそれが小数を受け入れることを願っています。

于 2012-06-09T09:07:35.117 に答える
0

CultureInfo.InvariantCulture10 進数から文字列に変換するときに使用できます。

msdnを参照

引用:

decimal value = -16325.62m;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
//       -16325.62
//       -16325.62
//       -16325,62

ユーザーが入力にコンマを使用する場合、マシン カルチャを使用して文字列から 10 進数に変換し、クエリを作成するときに を使用しCultureInfo.InvariantCultureて "." を使用して文字列に戻すことができることに注意してください。(限目)。

HTH

于 2012-06-09T09:14:08.073 に答える
-1

この問題を解決するために、あまり正しくないコードを使用しましたが、これが私がしたことです。 string ammount = (textBox2.Text).Replace (",","."); 値を文字列として挿入します。値が sql ステートメントに渡されると、次のようになります。

string initialquery = "INSERT INTO EXPENSES (ID, E_DATE, AMMOUNT, PERSON, COMMENTS, T_ID) " +
                                "VALUES ('" + id + "', '" + date.ToString("yyyy:MM:dd") + "', '" + ammount + "', '" + person + "', '" + comments + "', '" + tid + "')";

そしてその働き

于 2012-06-10T07:17:02.420 に答える