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

使用ADO.NET按日期筛选数据填充DataGridView时报类型转换错误如何解决

问题原因
  • 日期字符串格式错误:你定义的dmy、dmyplus变量值为'2021/21/11'、'2021/22/11',按常用的年/月/日格式解析时,21、22作为月份取值超出1~12的合法范围,SQL Server尝试将该varchar值转为datetime类型时触发越界错误。如果你的本意是筛选2021年11月21日到22日的数据,日期的月、日位置写反了。
  • 字符串拼接SQL的方式本身存在缺陷:不同数据库、不同区域配置的日期解析规则不一致,手动拼接的字符串很容易出现格式不匹配的转换错误,同时还存在SQL注入的安全风险。
解决方案

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

直接传DateTime类型的参数,无需手动处理日期字符串格式,ADO.NET会自动完成类型匹配,完全避免转换错误和SQL注入问题,同时自动释放数据库连接资源,示例代码如下:

// 直接定义DateTime类型的日期变量,不用手动拼接带引号的字符串
DateTime dmy = new DateTime(2021, 11, 21);
DateTime dmyplus = new DateTime(2021, 11, 22);
string query1 = "Select * from buy Where [date] >= @dmy and [date] < @dmyplus";
using (SqlConnection connection1 = new SqlConnection(ConnetionPath4))
{
    SqlDataAdapter adapter1 = new SqlDataAdapter(query1, connection1);
    // 给SQL语句添加参数,自动匹配DateTime类型
    adapter1.SelectCommand.Parameters.AddWithValue("@dmy", dmy);
    adapter1.SelectCommand.Parameters.AddWithValue("@dmyplus", dmyplus);
    DataTable data1 = new DataTable();
    adapter1.Fill(data1);
    // 后续绑定DataGridView的逻辑不变
}

方案2:修正日期字符串格式(仅临时验证用,不推荐生产环境使用)

如果要继续用字符串拼接的方式,先把日期调整为SQL Server通用的yyyy-MM-dd标准格式,修正后的变量定义如下:

var dmy = "'2021-11-21'";
var dmyplus = "'2021-11-22'";

内容的提问来源于stack exchange,提问作者benyamin dashtestani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:03