ASP - 从 MS Access DB 获取记录时遇到日期格式(在 WHERE 子句中)

Posted

技术标签:

【中文标题】ASP - 从 MS Access DB 获取记录时遇到日期格式(在 WHERE 子句中)【英文标题】:ASP - Struggling with date format (in WHERE clause) when fetching records from MS Access DB 【发布时间】:2013-05-29 13:03:36 【问题描述】:

在将现有(和以前工作的)站点从 Windows Server 2003 移动到 Server 2008,从 IIS6 跳转到 IIS7 的过程中,我遇到了这个奇怪的问题:

OpenSQL("SELECT * FROM bookings WHERE apartment_id = '" & strApartment & "' AND BookDate = #" & SwitchDate(dDate) & "#")

运行时,上述 SQL 脚本仅在日期中没有前导零的情况下返回行。例如,如果日期是 10/01/2010,它将返回行。但如果日期是 2010 年 1 月 1 日,它将不会返回行。 相反,我会收到此错误:

BOF 或 EOF 为 True,或者当前记录已被删除。请求的操作需要当前记录。

我对 ASP 一点也不熟悉(我相信在这种情况下运行 VB,虽然它是经典的 ASP - 我不知道你是怎么说的?)。但这是一个非常简单的请求,我无法理解发生了什么。我尝试删除 switchdate 函数(删除所有前导零),并使用语法,但都无济于事。

Access DB 保存格式为 01/01/2001 的记录。

【问题讨论】:

使用参数化查询,让工作弄清楚如何将正确格式化的日期值传递给框架代码。 什么是SwitchDate SQL 通常使用 mm/dd/yyyy hh:nn:ss - 您的 SwitchDate() 返回什么格式,您的 SQL 数据库使用什么格式? 01/01/2001 没有告诉我们是月/日/年还是日/月/年。 这段代码容易受到sql注入攻击。你实际上是在乞求被黑。 对不起,是的,格式是 dd/mm/yyyy。我应该注意到这一点!我将看看 switch 语句,作为一个 ASP 新手,我不确定这是一个内置函数还是自定义函数。但现在根据响应更有意义。 【参考方案1】:

虽然 ACE 和 Jet 数据库引擎确实将不明确的 #xx/yy/zzzz# 日期文字视为 mm/dd/yyyy,但它们也接受明确的格式 yyyy-mm-ddyyyy/mm/dd,因此您最好的解决方案是更新您的 SwitchDate()函数返回其中一种格式。

【讨论】:

刚刚检查了 SwitchDate 函数,它正在返回 mm/dd/yyyy。我已将其更新为 dd/mm/yyyy,它现在正在工作。非常感谢您为我指明了正确的方向!可能是因为我将语言环境设置为英国 - 因为这是典型的英国日期格式? 很高兴听到它正在工作,但yyyy-mm-dd 仍然是首选。最可能的原因是服务器在 Windows 的“区域设置”控制面板中定义了不同的“短日期”格式。如果将来出现类似情况,使用明确的格式可能会为下一个人省去一些麻烦。 感谢戈德的建议。我尝试更新到建议的格式,但我得到了同样的错误。这也是一个非常古老的网站,我怀疑它不会存在太久,所以我对目前的修复很满意。

以上是关于ASP - 从 MS Access DB 获取记录时遇到日期格式(在 WHERE 子句中)的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录

ASP.NET 在尝试插入 MS Access DB 时出错

针对 MS Access DB 设置此 asp.net 页面的最快方法。 .

将 INSERT 上的 ID 返回给 Ms Access Db?

如何使用 vb.net 从 MS Access DB 表单中找出 Activex 控件

MS Access db.Execute " INSERT INTO