c# - 使用 INSERT 将 DataGridView 中的十进制数字插入 MySQL
问题描述
大家,
我想将 DateGridView 表中的数据插入 MySQL。到目前为止它可以工作,但是只要有十进制数字,它们就不会在 MySQL 中以十进制形式存储,而是以整数形式存储。不转移小数位。我试图转换数据但没有成功。它们不存储为十进制数。感谢您的提示!!!!
这是代码
private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) // dòng
{
string str = "server=test; database=test; uid=test; pwd=test;";
MySqlConnection constr = new MySqlConnection(str);
constr.Open();
String cmdText = "INSERT INTO KPI_Kosten (Betrag, Tower, Jahr, Periode, Land) VALUES ('"
+ Convert.ToDecimal(dataGridView1.Rows[i].Cells[0].Value) + "','"
+ dataGridView1.Rows[i].Cells[1].Value + "','"
+ dataGridView1.Rows[i].Cells[2].Value + "','"
+ dataGridView1.Rows[i].Cells[3].Value + "','"
+ dataGridView1.Rows[i].Cells[4].Value + "' )";
MySqlCommand cmd = new MySqlCommand(cmdText, constr);
cmd.ExecuteNonQuery();
constr.Close();
}
}
解决方案
由于列数据类型定义设置为整数,小数位被截断,首先您应该将Betrag
列修改为decimal
具有一定精度和比例的数据类型,如下例所示:
ALTER TABLE KPI_Kosten MODIFY COLUMN Betrag decimal(10, 2);
之后,尝试MySqlParameter
使用参数化查询进行设置,以使用指定的设置强制decimal
数据类型(请参阅文档):
string str = "server=test; database=test; uid=test; pwd=test;";
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
using (MySqlConnection constr = new MySqlConnection(str))
{
constr.Open();
// if '@' prefix for parameters not working, change to '?'
String cmdText = "INSERT INTO KPI_Kosten (Betrag, Tower, Jahr, Periode, Land) VALUES (@Betrag, @Tower, @Jahr, @Periode, @Land)";
using (MySqlCommand cmd = new MySqlCommand(cmdText, constr))
{
// if you're experiencing too many parameters error, uncomment this line below
// cmd.Parameters.Clear();
MySqlParameter betrag = new MySqlParameter("@Betrag", MySqlDbType.Decimal);
betrag.Precision = 10;
betrag.Scale = 2;
betrag.Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[0].Value);
cmd.Parameters.Add(betrag);
cmd.Parameters.Add("@Tower", MySqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[1].Value;
// other parameters
cmd.ExecuteNonQuery();
}
}
}
注意:您也可以尝试不带精度的简化版本,例如cmd.Parameters.Add("@Betrag", MySqlDbType.Decimal).Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[0].Value);
.
推荐阅读
- chart.js - Chart.js 框注解填充整个图表
- amazon-web-services - 从 Secrets Manager 中检索 Firehose Redshift 目标用户名/密码
- c# - 如何允许从动态生成的表中下载 asp.net 中的文件
- azure - 如何使用应用程序标识符添加 Azure AD 应用程序
- html - 在 HTML 中对齐文本框
- python - Python 可以对 R 进行函数调用吗?
- r - 将 SeatGeek API 数据(JSON 格式)导入平面数据框的最简单方法是什么?
- javascript - 如何在不更改 html 字体大小的情况下使文本框变大?
- mlflow - mlflow 不支持 adbazureml
- xml - TALLY - http 标头 DISABLELOG 未禁用 http 日志记录