2

datetime更新SQL Server 2008 Express 上的列时出现异常:

eventinfo.StartDateTime = DateTime.ParseExact(start, 
                                              "MM/dd/yyyy hh:mm tt", 
                                              CultureInfo.InvariantCulture);
db.Entry(eventinfo).State = EntityState.Modified;
db.SaveChanges();

例外:

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

知道如何避免这种异常吗?

4

1 回答 1

3

Sql Server 的日期/时间数据类型的域如下:

  • datetime2(100 纳秒精度)1753-01-01T00:00:00.0 — 9999-12-31T23:59:59.9999999。
  • datetime(毫秒精度......有点)1753-01-01T00:00:00.000 — 9999-12-31T23:59:59.997
  • smalldatetime(1 秒精度)1900-01-01T00:00:00 — 2079-06-06T23:59:59

CLRDateTime结构也具有 100 纳秒的精度。它是自其纪元 (0001-01-01T00:00:00) 以来的 100 秒滴答计数。它的域是 0001-01-01T00:00:00 — 9999-12-31T23:59:59.9999999。

您会注意到 CLR 的扩展域DateTime与 SQL Server 的datetime2.

CLR 的默认值DateTime是它的纪元 (0001-01-01T00:00:00)。1753-01-01T00:00:00 之前的任何值都将引发超出范围的异常。

很可能,您的DateTime值没有被初始化,或者 DateTime.ParseExact() 收到垃圾数据,成功解析它并以 1753-01-01 之前的日期/时间结束。

于 2012-08-03T19:12:36.317 回答