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 日期:20160506
和 20160527
。 YYYYMMDD
格式与文化/语言无关。
@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") 不幸的是,我指出这一点的先前答案已被删除。 SQLset 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 语句错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET - MS-ACCESS - VB.NET - SQL 语句错误