将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

我有一种类型的Datetime,在数据库中我想保存DateTime.Now所有的东西都没问题。但是当我想保存我的价值时我得到错误

  LogTime = log.AnswerTime ?? DateTime.Now 

将datetime2数据类型转换为日期时间数据类型会导致超出范围的值。

LogTime值为: 4/3/2013 12:05:04 PM

我觉得一切都好,但为什么呢?

在.NET DateTime2和DateTime中都映射到System.DateTime,因此没有任何转换。 问题来自数据库如何处理两种数据类型。 例如,MSSQL以不同的方式对待它们。 在MSSQL中,DATETIME支持1753/1/1至9999/12/31,而DATETIME2支持0001/1/1至9999/12/31。

这意味着如果您从DateTime2列中读取数据库中的null值,您将获得0001/1/1,这绝对是超出范围值。

.NET为您提供了一些帮助,您可以在这里阅读http://msdn.microsoft.com/en-us/library/bb675168.aspx 。

确保您使用的是SqlDb类型,如果您使用的是数据网格,请确保您的列正确使用typeof,例如

 new DataColumn("myDate", typeof(DateTime))