C# MySQL 十进制数与 .或
本文关键字:十进制数 MySQL | 更新日期: 2023-09-27 18:36:34
我在mysql数据库中有一个表FEES,其中一列是AMMOUNT,类型为十进制(10,2)。我有一个 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();
问题与区域环境有关。如果我将格式设置为希腊语。十进制符号是","。当我尝试插入带有","的十进制值时,它不接受它(存储为 405 而不是 40,5)。如果我将十进制符号设置为"."并且我在文本框中有 40.5 正确存储。如果我将区域设置设置为 ENGLISH,并将十进制值设置为 ","再次不起作用。似乎只有当十进制符号为"."我不太明白这一点。如何使其接受","作为小数运算符?
此致敬意乔治·乔治
我认为您设置了开发计算机的区域设置,但SQL Server仍处于en-us模式,因此也更改了SQL服务器的区域设置。
希望它可以根据需要接受小数。
从十进制转换为字符串时可以使用CultureInfo.InvariantCulture
。
请参阅 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
请注意,如果用户在其输入中使用逗号,则可以使用计算机区域性从字符串转换为十进制,并在生成查询时使用CultureInfo.InvariantCulture
转换回带有"."(句点)。
呵
为了解决这个问题,我使用了不太正确的代码,但这是我所做的。 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 + "')";
及其工作