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

Visual Studio中VB.NET用DateTimePicker插入MySQL报日期错误是什么原因

错误原因

  • 核心问题是MySQL日期格式不匹配:MySQL的DATE/DATETIME类型要求标准日期格式为YYYY-MM-DD,你代码中直接拼接DateTimePicker1.Value.Date时,会自动调用系统默认的区域格式转换为字符串,你当前系统输出的是MM/DD/YYYY格式,不符合MySQL字段的格式校验规则,因此抛出报错。
  • 额外隐患:你当前直接拼接用户输入生成SQL语句的写法存在严重SQL注入风险,恶意用户可通过输入特殊字符篡改SQL逻辑,甚至造成数据泄露、数据丢失等问题。
  • 操作方法错误:插入属于写操作,不应该调用ExecuteReader(该方法用于查询场景返回结果集),应该调用ExecuteNonQuery执行写操作。

修复方案

推荐直接使用MySQL参数化查询,无需手动处理日期格式,同时天然规避SQL注入风险,参考代码如下:

Dim query As String
conn.Open()
' 编写带占位符的SQL语句,不要直接拼接变量
query = "INSERT INTO `librarydb`.`tblmember` (`Name`, `NIC`, `Gender`,`Contact`,`Email`,`Date_Joined`) VALUES (@Name, @NIC, @Gender, @Contact, @Email, @DateJoined);"
COMMAND = New MySqlCommand(query, conn)
' 逐个绑定参数,驱动会自动适配数据类型和格式
COMMAND.Parameters.AddWithValue("@Name", txtname.Text)
COMMAND.Parameters.AddWithValue("@NIC", txtNIC.Text)
COMMAND.Parameters.AddWithValue("@Gender", txtgender.Text)
COMMAND.Parameters.AddWithValue("@Contact", txtcontact.Text)
COMMAND.Parameters.AddWithValue("@Email", txtemail.Text)
' 直接传入DateTime类型值即可,无需手动转字符串
COMMAND.Parameters.AddWithValue("@DateJoined", DateTimePicker1.Value.Date)
' 执行插入操作调用ExecuteNonQuery
COMMAND.ExecuteNonQuery()
conn.Close()

临时验证提示:如果仅做临时调试不想改参数化写法,可手动格式化日期为MySQL支持的格式:DateTimePicker1.Value.ToString("yyyy-MM-dd"),但该方式依然存在SQL注入风险,禁止在生产环境使用。

内容的提问来源于stack exchange,提问作者Mohamed Sharaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:02