【问题标题】:The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range?将 datetime2 数据类型转换为 datetime 数据类型导致超出范围?
【发布时间】:2011-11-15 05:27:24
【问题描述】:

我正在处理的应用程序包含一个日期选择器,如果我将该选择器中的时间设置为一个非常旧的值或在很远的将来,当我尝试将此值保存在数据库中时,服务器会抛出此异常,原因是什么呢?

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

【问题讨论】:

    标签: sql silverlight sql-server-2008 silverlight-4.0


    【解决方案1】:

    DateTime 的范围:1753 年 1 月 1 日到 9999 年 12 月 31 日

    DateTime2 的范围是:0001-01-01 到 9999-12-31

    因此,如果您输入 1753 年之前的日期,当表中的字段类型为 DateTime 时,您会收到此错误。

    【讨论】:

      【解决方案2】:

      Entity Framework 将为值 {01/01/0001 00:00:00} 的字段添加默认日期,这超出了 SQL 日期生成的范围。所以为了让它工作,我们需要让 EF 不生成默认日期,我们可以通过在该类的 Model 中执行以下操作使其可以为空。

      在这种情况下,EntityFramework 会为 LastLoggedIn 字段生成一个默认值。如果数据库中的该字段可以取空值,则意味着我们可以通过在模型中进行以下操作使其可以为空

       [Display(Name = "LastLoggedIn")]
              public DateTime? LastLoggedIn { get; set; }
      

      【讨论】:

        【解决方案3】:
        Products prd = new Products();            
        prd.CreatedDate = DateTime.Now;
        

        你可以像上面那样添加

        【讨论】:

          【解决方案4】:

          此错误也可能是由于控制器操作的绑定列表中的字段名称拼写错误造成的。在我的情况下,日期默认为超出范围的日期,因为日期字段没有像我想象的那样绑定。

          【讨论】:

            猜你喜欢
            • 2011-04-07
            • 2010-11-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多