【问题标题】:What is datetime2?什么是日期时间2?
【发布时间】:2010-10-13 22:25:07
【问题描述】:

我在 MSSQL 2008 的 INSERT 语句中得到了这个

System.Data.SqlClient.SqlException: datetime2 数据的转换 类型为日期时间数据类型导致 在一个超出范围的值。

【问题讨论】:

  • 当使用实体框架将 System.DateTime 插入我的 SQL2008 数据库时,会出现问题。我将 DB 中的数据类型更改为 datetime2,现在一切运行顺利。
  • 问题从逻辑错误开始,并且 DateTime 从未初始化,即我试图插入 0001-01-01 00:00:00.0000000
  • 当我没有在 EF4 中初始化 DateTime 时,这个得到了我,因为我在数据库中有 GetDate() 的默认值。

标签: .net sql entity-framework sql-server-2008 c#-3.0


【解决方案1】:

定义与基于 24 小时制的时间组合的日期。 datetime2 可以看作是现有 datetime 类型的扩展,它具有更大的日期范围、更大的默认小数精度和可选的用户指定精度。

http://technet.microsoft.com/en-us/library/bb677335.aspx

【讨论】:

    【解决方案2】:

    来自technet

    定义与基于 24 小时制的时间组合的日期。 datetime2 可以看作是现有 datetime 类型的扩展,它具有更大的日期范围、更大的默认小数精度和可选的用户指定精度。

    我必须检查,因为我认为 datetime2varchar2 有某种关系。显然,根本没有关系。

    输入您的代码,以便我们猜测问题的原因。

    【讨论】:

      【解决方案3】:

      SQLServer 的 datetime 数据类型的允许值范围比 .net datetime 数据类型小得多。 SQLServer 的 datetime 类型基本支持公历,所以你可以拥有的最小值是 1/1/1753。 2008 年,SQLServer 添加了一个 datetime2 数据类型,支持回溯到第 1 年(没有第 0 年)。听起来您正在尝试将 1753 年 1 月 1 日之前的日期时间值插入到日期时间(不是 datetime2)SQLServer 列中

      【讨论】:

      • 投票赞成回答用户真正需要知道的而不是字面问题:)
      【解决方案4】:

      可能是您的数据库表有一个“DATETIME”或“SMALLDATETIME”列,而您试图插入一个超出范围的日期? DATETIME 涵盖 1753-1-1 到 9999-12-31,而 SMALLDATETIME 仅涵盖 1900-1-1 到 2079-6-6。

      新的 SQL Server 2008 DATETIME2 数据类型将涵盖 0001-1-1 到 9999-12-31。

      马克

      【讨论】:

        【解决方案5】:

        当我的数据库列被创建为 NOT NULL 并且我在我的 ADO.Entity 框架 EntityType 中的 DateTime 属性上特别指定了 Nullable = true 时,我收到了这个错误。

        为了修复它,我将 Nullable 属性设置为 (None)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-01
          • 2010-09-11
          • 2021-11-30
          • 1970-01-01
          • 1970-01-01
          • 2016-11-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多