我在更新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数据类型转换为日期时间数据类型会导致超出范围的值。该语句已被终止。
知道如何避免这种异常吗?
答案 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之前结束日期/时间。