【问题标题】:The conversion of a datetime2 to a datetime is out of rangedatetime2 到 datetime 的转换超出范围
【发布时间】:2015-01-11 00:17:22
【问题描述】:

已阅读有关此问题的许多帖子,但没有发现任何可行的方法。

我们的 SQL 数据库有这样设置的字段(datetime 的数据类型)

相应的模型属性具有以下声明

    [DisplayName("Effective Date")]
    [Column(TypeName = "DateTime")]
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    public DateTime? EffectiveDate { get; set; }

但是,如果我输入日期 11/11/1111,当我的程序运行 DbContext.SaveChanges() 时会出现以下错误

将 datetime2 数据类型转换为 datetime 数据类型 导致超出范围的值。声明已终止

我不知道,也没有在我们的 ASP MVC 项目或 SQL 表中找到任何范围规范。非常感谢任何帮助。

【问题讨论】:

    标签: c# sql-server entity-framework asp.net-mvc-4 datetime


    【解决方案1】:

    您已将列类型指定为:

    [Column(TypeName = "DateTime")]
    

    这将映射到 SQL 服务器中的Dateime type 列,and not Datetime2

    DateTime 的有效范围为 1753 年 1 月 1 日到 9999 年 12 月 31 日,因此您的值 11/11/1111 超出范围。

    错误消息包含datetime2,这是由于提供的值11/11/1111 属于datetime2 范围内。

    【讨论】:

    • 除了手动验证例程之外还有什么可以解决这个问题的吗?
    • @NealR,如果您需要存储超出上述范围的值,并且可以选择更改列的数据类型,您可以将其设为DateTime2
    • 谢谢。这非常有用。
    【解决方案2】:

    MSSQL 的DateTime 数据类型范围是January 1, 1753, through December 31, 9999

    http://msdn.microsoft.com/en-us/library/ms187819.aspx

    声明使用datetime2 的错误消息有点误导,但最终的问题是您尝试使用的日期超出了DateTime 数据类型的范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多