c# - 使用 INSERT 将十进制数从 DataGridView 插入 MySQL

标签 c# mysql datagridview

大家

我想将 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 数据类型(请参阅 documentation ):

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);.

关于c# - 使用 INSERT 将十进制数从 DataGridView 插入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51741033/

相关文章:

c# - 用户登录后更改 HttpContext.Current.User.Identity.Name

c# - Where 条件中的字符串列表

c# - Gmail API : Watch Inbox label Only

MySQL INSERT INTO ... SELECT 或默认值

mysql - 禁用 innodb 对 MySQL 的支持

c# - 多表加法(+)合二为一(使用sql server 2014、datagridview、visual studio)

winforms - Datagridview 列宽

c# - 您如何让 XAML 元素缩放以适合其容器?

php - 如何在 zend 框架中显式关闭 mysql 连接?

c# - 将 .txt 文件内容导入到 datagridview