【问题标题】:Getting SqlDateTime overflow. exception in 2008获取 SqlDateTime 溢出。 2008 年例外
【发布时间】:2011-05-12 11:49:21
【问题描述】:

我将默认日期(开始日期和结束日期)传递给 sp 作为('1/1/1753 12:00:00 AM' & '12/31/9999 12:00:00 AM')。

这在 2005 年运行良好,但在 2008 年出现“SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间”异常。

当我从 Management Studio 运行 sp 时,它工作正常,但在通过网站的实时服务器上却出现错误。

提前致谢

【问题讨论】:

  • 你如何从代码中调用那个 sp?

标签: sql-server overflow sqldatetime


【解决方案1】:

我同意 Ed Harper 的观点,即问题可能在于不同环境之间的区域设置或语言设置差异。我不同意他的解决方法。

尽快将这些日期时间值放入 DateTime 变量中,不要将它们视为字符串。 IE。在网站上执行此操作,然后依靠例如ADO.Net 将日期时间值正确编组到 SQL Server。更新存储过程以将参数也视为日期时间 - 基本上,在处理过程中尽早停止将它们视为字符串。

【讨论】:

    【解决方案2】:

    这可能是安装操作系统的语言环境或链接到运行代码的用户帐户的语言环境的问题,因为不同的语言环境以您提供的格式将日期解释为DD/MM/YYYYMM/DD/YYYY

    解决此问题的最佳方法是使用规范的日期格式 - YYYY-MM-DDTHH:MM:SS AM/PMYYYYMMDD HH:MM:SS AM/PMYYYY-MM-DD HH:MM:SS(24h)

    【讨论】:

    • 如果语言是英国的,您显示的虚线日期格式不安全。它将在日期和时间之间放置一个T(而不是空格)
    • 已将实时服务器操作系统上的日期格式更改为 MM/dd/yyyy 但仍然出现相同的错误
    • @shoab - 您还需要检查与 SQL 服务器建立连接的帐户。您还可以尝试在连接上设置日期格式(在发出任何命令之前)-SET DATEFORMAT mdy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多