【发布时间】: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 新手,我不确定这是一个内置函数还是自定义函数。但现在根据响应更有意义。