如何修复"SqlException:将datetime2数据类型转换为日期时间数据类型导致超出范围的值."

Sco*_*合理论 10 c# asp.net entity-framework webforms

SqlException:将datetime2数据类型转换为datetime数据类型导致超出范围的值.

我的代码是这样的:

        using (var contxt = new realtydbEntities())
        {
            var status = GetStatus();

            var repIssue = new RepairIssue()
            {
                CreaterId = AuthorId,
                RepairItemDesc = this.txtDescription.Text,
                CreateDate = DateTime.Now,//here's the problem
                RepairIssueStatu = status
            };

            contxt.AddObject("RepairIssues", repIssue);
            contxt.SaveChanges();
        }
Run Code Online (Sandbox Code Playgroud)

所述CREATEDATE属性映射到列哪种类型SMALLDATETIME.

如何让这段代码运行?

Mil*_*ton 12

我有相同的异常,但这是因为一个不可为空的datetime属性采用最小日期时间值.这不是DB的小时间,但C#的最小日期时间超过了SQL的最小日期时间限制.解决方案很明显,正确设置日期时间.顺便说一句,代码不是我的,这就是为什么我不知道那个属性:)

  • 您如何正确设置日期时间? (2认同)

Jas*_*son 7

问题的根源是C#DateTime对象比SQL的smalldatetime类型“更大”。以下是这些差异的良好概述:http : //karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

因此,实际上您的选择是:

  1. 将列类型从smalldatetime更改为datetime(或datetime2)
  2. 代替使用EF,而是构造自己的SQL命令(您可以使用SqlDateTime)

  • 这并不能解释为什么`DateTime.Now'将不适合SmallDateTime。它与大小无关,而与它可以存储的范围和精度/准确性有关。“ DateTime.Now”应该始终是SmallDateTime字段的有效值(除非您将PC时钟设置为300年),但是在尝试简单地保存“ DateTime.Now”值{时,我目前遇到了完全相同的错误04/10/2013 12:49:00}插入SQL SmallDateTime字段。我无法在SO的任何地方找到正确的答案,这令人沮丧。 (3认同)