2012-08-03 65 views
0

我有一个例外,而更新的SQL Server 2008 Express的一个datetime柱:超出范围的异常,同时DATETIME2转换为datetime数据类型

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

例外:

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

任何想法如何避免此异常?

+1

你转换的价值是多少? – 2012-08-03 18:54:23

+0

显示如何定义和填充“开始”可能是一个好的开始(没有双关语意图)。 – 2012-08-03 19:07:06

+0

其中一个datetime如下所示:03/08/2012 12:39:00 PM – San 2012-08-03 19:17:26

回答

1

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的datetime2相比,您会注意到CLR DateTime的扩展域。

CLR的DateTime的默认值是其时期(0001-01-01T00:00:00)。 1753-01-01T00:00:00之前的任何值都会导致超出范围的异常。

在所有可能的情况下,您的DateTime值在某种程度上不会被初始化,或者DateTime.ParseExact()获取交易垃圾数据,成功解析并在1753-01-01之前清空日期/时间。

+0

很高兴知道,但我不认为这是事实。 – San 2012-08-03 19:18:13

+0

对此前的评论感到抱歉。你是对的。我的日期值中的一个表单为空。即0001-01-01的东西。造成这个问题。非常感谢。我接受了你的答案! – San 2012-08-03 19:43:30

相关问题