【问题标题】:Classic ASP, DATE difference between IIS6 and IIS8经典 ASP,IIS6 和 IIS8 的 DATE 区别
【发布时间】:2015-03-05 17:43:27
【问题描述】:

我正在帮助将经典的 asp 网站(前端)和 ms access 数据库(后端)从 Windows 2003 IIS6 服务器迁移到 Windows 2012 IIS 8.5 服务器。我对此查询特别有疑问;

sqlquery1 = "Select RentalNum, CarID, RentalStatus, StartDate, EndDate from table where CDate(EndDate) <= CDate('"&Date()&"') order by CDate(EndDate) desc"

在现有系统上一切正常。在新系统上,返回的结果不是

任何指针?

【问题讨论】:

    标签: ms-access iis asp-classic


    【解决方案1】:

    检查查询中使用的这个表达式:

    CDate('"&Date()&"')
    

    Date() 函数将系统日期作为日期/时间值返回。但随后该表达式在日期/时间值之前和之后添加引号,将其转换为字符串值。然后CDate() 获取该字符串并将其再次转换回日期/时间值。

    希望这个描述能让你相信这些操作充其量是白费力气。但是,如果两个服务器具有不同的日期格式设置,则由完整的 CDate() 表达式生成的日期可能会不同。

    我不肯定这是您问题的根源,但您可以轻松消除这种可能性。 Access db 引擎支持Date() 函数,因此您可以直接使用它,而无需先将其转换为字符串,然后再转换回日期/时间值。

    sqlquery1 = "Select RentalNum, CarID, RentalStatus, StartDate, EndDate " & _
        "from [table] where CDate(EndDate) <= Date() order by CDate(EndDate) desc"
    

    如果该更改不能解决问题,接下来检查那些 EndDate 文本值并确保它们被解释为您期望的日期:

    SELECT EndDate, CDate(EndDate) AS EndDate_as_date
    FROM [table];
    

    您提到了您的“最初的想法是将架构更改为适当的日期”。我认为这是最好的方法,因为基于日期作为日期/时间的开发比使用日期作为字符串更明智。

    【讨论】:

    • 按照您的建议更改查询,删除 CDate 和单/双引号,只留下 date() 部分几乎解决了问题并返回了预期的结果。尽管与现有系统相比,评估顺序仍然不正确,但将数据库模式从文本更改为短日期/时间修复了该问题。现在我只需要审核整个系统并删除任何其他不必要的引用日期评估。非常感谢您的时间和详细的解释。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多