将datetime2转换为datetime数据类型时超出范围异常

时间:2012-08-03 18:51:32

标签: asp.net sql-server-2008-express

我在更新SQL Server 2008 Express上的datetime列时遇到异常:

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

例外:

  

将datetime2数据类型转换为日期时间数据类型会导致超出范围的值。该语句已被终止。

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

1 个答案:

答案 0 :(得分: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

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

与SQL Server的DateTime相比,您会注意到CLR datetime2的扩展域。

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

在所有可能的情况下,你的DateTime值在某种程度上都没有被初始化,或者DateTime.ParseExact()正在获取递送的垃圾数据,成功解析它并在1753-01-01之前结束日期/时间。