You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DateTimePicker自动添加编辑日期并解决MySQL日期转换报错

问题根因分析
  1. 插入日期的格式不符合MySQL规范:MySQL默认识别的日期格式为yyyy-MM-dd,你代码中使用dd/mm/yyyy格式拼接SQL,插入后日期字段会变成非法值0000-00-00,查询时MySQL数据适配器无法将该非法值转换为.NET的日期类型,就会抛出转换错误。
  2. 直接拼接SQL的写法本身存在兼容性问题:不同地区、不同系统的日期字符串格式可能存在差异,手动转字符串拼接很容易出现格式不匹配的问题,同时还存在SQL注入风险。
  3. 如果要使用ON UPDATE CURRENT_TIMESTAMP属性,对应的字段需要设置为TIMESTAMP/DATETIME类型,手动传值反而可能干扰数据库自动填充的逻辑。
可行解决方案

方案1:改用参数化查询(最推荐)

修改后的新增按钮代码:

Private Sub tambah_btn_Click(sender As Object, e As EventArgs) Handles tambah_btn.Click
        cmd = conn.CreateCommand()
        cmd.CommandType = CommandType.Text
        ' 用参数占位,不需要手动拼接字符串
        cmd.CommandText = "insert into produk values(@kode, @nama, @harga, @tgl_beli)"
        ' 直接传递DateTime类型,不需要手动转字符串
        cmd.Parameters.AddWithValue("@kode", kode.Text)
        cmd.Parameters.AddWithValue("@nama", nama.Text)
        cmd.Parameters.AddWithValue("@harga", harga.Text)
        cmd.Parameters.AddWithValue("@tgl_beli", DateTimePicker1.Value.Date)
        
        cmd.ExecuteNonQuery()
        kode.Text = ""
        nama.Text = ""
        harga.Text = ""

        disp_data()
        MessageBox.Show("Data berhasil ditambahkan")
End Sub

兼容历史非法日期配置

如果数据库里已经存在0000-00-00格式的非法日期,需要在MySQL连接字符串中添加Convert Zero Datetime=True参数,示例:
server=127.0.0.1;user=root;database=你的库名;password=你的密码;Convert Zero Datetime=True

方案2:搭配ON UPDATE CURRENT_TIMESTAMP实现自动填充

首先修改表结构,新增自动更新的时间字段:

ALTER TABLE produk ADD COLUMN update_time DATETIME 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

后续插入、修改数据时都不需要给update_time字段传值,MySQL会自动在数据新增、更新时把该字段设置为当前时间,不需要业务代码额外处理。

实现原理
  • 参数化查询传递.NET原生DateTime类型时,MySQL驱动会自动将其转换为MySQL兼容的日期格式,完全避免手动处理字符串格式的出错风险,同时还能防范SQL注入。
  • 连接字符串添加Convert Zero Datetime=True后,驱动会自动把数据库中的0000-00-00非法值转换为.NET中的DateTime.MinValue,不会抛出转换异常。
  • ON UPDATE CURRENT_TIMESTAMP是MySQL原生的字段属性,只要该行数据的任意字段发生变更,MySQL会自动将该字段更新为当前时间,不需要业务代码参与处理。

内容的提问来源于stack exchange,提问作者Gmail Gmqil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 23:33:03