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

筛选两日期间数据遇System.Data.SqlClient.SqlException日期转换超范围错误

解决SQL Server日期转换超出范围的问题

嗨,我来帮你搞定这个烦人的转换错误!你遇到的System.Data.SqlClient.SqlException: varchar数据类型转换为datetime数据类型时导致超出范围问题,根源出在直接把日期控件的字符串结果拼进SQL语句的写法上,咱们一步步解决:

问题核心原因

  1. 日期格式不兼容:dateTimePicker1.Value.ToString()会按照你本地系统的日期格式生成字符串(比如dd/MM/yyyy),但SQL Server默认的日期解析格式可能是MM/dd/yyyy,当你的日期日份大于12时(比如13号),SQL就会把它当成月份,自然超出范围报错。
  2. 严重的安全风险:这种字符串拼接写法存在SQL注入漏洞,恶意用户可以通过构造特殊日期值篡改你的SQL语句,窃取或破坏数据。

正确解决方案:使用参数化查询

参数化查询是处理数据库日期类型的标准做法,它会自动处理类型转换,完全避免格式问题和注入风险。修改后的代码如下:

// 用using语句自动管理数据库连接资源,避免泄漏
using (SqlConnection con = new SqlConnection("你的数据库连接字符串"))
{
    con.Open();
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandType = CommandType.Text;
    // 用@参数占位符代替直接拼接字符串
    cmd.CommandText = @"SELECT 
                        daytime AS DATE, 
                        COLUMN_2 AS SHIFT, 
                        COLUMN_3 AS 'PART NO',
                        COLUMN_4 AS 'PART NAME',
                        BSNO AS 'BASKET NUMBER',
                        Spare1 AS MATERIAL, 
                        CAS6 AS 'CASCADE RINSE 6 TIME (sec)',
                        DRY AS 'DRYER TIME (sec)',
                        TEMP1 AS 'DRYER TEMP (°c)' 
                        FROM Table_2 
                        WHERE daytime BETWEEN @StartDate AND @EndDate";
    
    // 直接传入DateTime类型值,SQL会自动处理类型转换
    cmd.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = dateTimePicker1.Value;
    cmd.Parameters.Add("@EndDate", SqlDbType.DateTime).Value = dateTimePicker2.Value;

    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    metroGrid1.DataSource = dt;
    // using块结束时会自动关闭连接,无需手动调用con.Close()
}

额外优化建议

  • 如果你的daytime字段是SQL Server的datetime2类型,把参数类型改成SqlDbType.DateTime2会更匹配,避免不必要的类型转换。
  • 永远不要用字符串拼接的方式构造包含用户输入(或控件值)的SQL语句,参数化是唯一安全可靠的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:28:06