如何向Microsoft SQL Server发送携带DateTime类型参数的查询?
问题原因
- 语法错误:SQL语句中日期类型的常量需要用单引号包裹,你当前直接拼接日期变量,生成的SQL没有单引号,不符合SQL语法规范
- 格式不匹配:不同数据库对日期字符串的解析规则不同,直接把DateTime类型隐式转字符串拼接,很容易出现和数据库预期格式不一致的情况,导致日期解析失败
- 安全风险:拼接SQL的写法存在SQL注入漏洞,生产环境严禁使用
解决思路
- 优先使用参数化查询(最推荐)
不要直接拼接SQL字符串,改用数据库驱动提供的参数占位符功能,示例逻辑如下(以C#为例):
这种方式会由驱动自动处理日期类型的格式、引号问题,同时彻底避免SQL注入风险。DateTime date; SqlCommand cmd = new SqlCommand("select * from schools where date = @Date", connection); cmd.Parameters.AddWithValue("@Date", date); SendCommand(cmd); - 若临时调试非要拼接字符串(极不推荐生产使用)
手动把日期转为数据库兼容的标准格式,同时补充单引号:
注意需根据你实际使用的数据库调整日期格式,同时要规避日期值中含特殊字符导致的语法异常。DateTime date; string sql = "select * from schools where date = '" + date.ToString("yyyy-MM-dd HH:mm:ss") + "'"; SendCommand(sql);
内容的提问来源于stack exchange,提问作者sunsunsun2200
相关产品推荐
相关产品推荐

