VB.Net 中的 SQL 语句错误

Posted

技术标签:

【中文标题】VB.Net 中的 SQL 语句错误【英文标题】:SQL statement error in VB.Net 【发布时间】:2016-09-01 08:53:56 【问题描述】:

这是我在 VB.Net 的调试模式下得到的 SQL 语句。

SELECT  dt_Date as 'Date', 
        s_Time as 'Time', 
        s_For as 'For', 
        s_Categ as 'Category', 
        s_Count as 'Count', 
        s_Remarks as 'Remarks' 
FROM Entry 
WHERE (s_ENo = '22' and dt_date BETWEEN '06-05-16' And '27-05-16')

我不确定上述陈述有什么问题,因为在我看来一切都很好。

错误信息说明

附加信息:转换日期时转换失败和/或 字符串的时间。

有什么解开这个谜题的建议吗?

【问题讨论】:

使用 ISO-8601 日期:2016050620160527YYYYMMDD 格式与文化/语言无关。 @lad2025,不确定如何使用它以及它对我的查询有何帮助,因为大多数查询都依赖于日期。 只需将'06-05-16' 替换为'20160506' DateTimePicker1.Value.ToShortDateString 这是在 SQL 查询中到达日期的语法 正如 Dan 建议的那样,首先不要将您的 DateTime转换为 字符串,然后强制 SQL Server 必须将它们转换回 @987654328 @ 值,您将避免这些转换问题。 【参考方案1】:

如果您使用的是 MS-SQL 服务器,请使用以下说明。

基本解决方案是您必须将日期提供为 mm/DD/YYYY 格式或 YYYY-MM-DD 日期格式到 ms-sql 查询中。

因此,在将日期传递给查询之前,请将您的日期转换为 mm/DD/YYYY 格式或 YYYY-MM-DD 格式。

【讨论】:

感谢大家的建议,帮助我解决问题。这一变化使我的 sql 代码能够完美运行。 DateTimePicker1.Value.Date.ToString("yyyy-MM-dd") 不幸的是,我指出这一点的先前答案已被删除。 SQL set dateformat dmy select MONTH(CAST('1978-05-06' as datetime)) 表明,在某些情况下,SQL Server 会在 4、2、2 分组中解释用破折号分隔的 8 位数字,并将其解释为 YYYY-DD-MM 而不是 YYYY-MM-DD。因此,这不是一种可以安全使用的格式。删除破折号(如果您坚持使用字符串)或使用 parameters 并完全停止使用字符串。【参考方案2】:

如果是字符串文字,请使用强类型参数。除了避免SQL Server端的数据类型转换问题,参数:

避免以特定方式格式化日期/时间字符串文字 通过提供执行计划结果来提高性能 防止 SQL 注入(禁止在服务器端使用动态 SQL)

【讨论】:

【参考方案3】:

您必须将日期字符串格式化为 YYYYMMDD,或者如果您知道服务器日期格式,则格式与服务器相同

【讨论】:

以上是关于VB.Net 中的 SQL 语句错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL插入语句语法错误VB.net

ASP.NET - MS-ACCESS - VB.NET - SQL 语句错误

更新语句中的 VB.NET 语法错误

如何解决 vb.net 中的这个 SQL 语法错误?

“INSERT INTO 语句中的语法错误”错误 - 错误是啥?

vb.net中的SQL事务语句