【问题标题】:C# After inserting from DataGridView into MySQL data are truncatedC# 从 DataGridView 插入 MySQL 后数据被截断
【发布时间】:2018-12-11 23:26:45
【问题描述】:

我制作了一个小应用程序,通过单击按钮自动将 datagridview 中的数据插入到 MySQL 表中。我的问题是,在粘贴到 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=xxxx; database=xxxx; uid=xxxx; pwd=xxxxxx;";
                    MySqlConnection constr = new MySqlConnection(str);
                    constr.Open();
                    String cmdText = "INSERT  INTO table (spalte1, spalte2, spalte3) VALUES ('"
                                               + dataGridView1.Rows[i].Cells[0].Value + "','"
                                               + dataGridView1.Rows[i].Cells[1].Value + "','"
                                               + Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value).ToString("yyyy-MM-dd HH:mm:ss.fff") + "','"
                                               + dataGridView1.Rows[i].Cells[3].Value + "')";
                    MySqlCommand cmd = new MySqlCommand(cmdText, constr);
                    cmd.ExecuteNonQuery();
            constr.Close();
        }

    }

【问题讨论】:

  • 为什么不能增加 MySQL 中列值的大小?如果你真的不能增加列的大小,那么你应该在前端做一些字符限制,并在后端做一个验证来防止这种情况发生。
  • 嗨瑞恩,感谢您的回答。这不是一个最佳选择,因为我不知道明天在列中我会有多少个字符。然后我必须将 MySQL 中的所有内容都设置为最大值,这样我就不会遇到保存未被注意到的缩短数据的问题。我想像“数据太长”之类的 SQL 错误消息或类似的东西
  • 由于 MySQL 正在截断,我认为它不会产生错误,如果您可以将 MySQL 设置为不截断,那么它可能会产生错误消息,但正如我之前所说,如果您要限制您的列可以容纳多少,那么您应该在后端验证这一点并在执行插入之前返回错误。在前端提醒用户您有限制也会对用户有所帮助。

标签: c# mysql windows winforms datagridview


【解决方案1】:

您想将 MySQL 的 SQL Mode 设置为 Traditional。这将启用Strict SQL Mode,这将在插入或更新期间截断数据时引发错误。

正如其他人所评论的,用户友好的方法是在用户尝试存储数据之前额外让他们了解限制。

【讨论】:

  • 谢谢你 NineBerry。这似乎有帮助。那么 STRICT 模式是适用于所有 MYSQL 表还是仅适用于使用该模式创建的一个表?
  • 适用于所有表格。您可以为事务表和非事务表独立打开/关闭严格模式,但我认为这不相关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
相关资源
最近更新 更多