什么是datetime2?

时间:2009-03-17 19:50:47

标签: .net sql entity-framework sql-server-2008 c#-3.0

我在INSERT语句中得到了这个MSSQL 2008

  

System.Data.SqlClient.SqlException:   datetime2数据的转换   输入到日期时间数据类型   在超出范围的价值。

5 个答案:

答案 0 :(得分:20)

SQLServer的datetime数据类型允许值的范围小于.net datetime数据类型。 SQLServer的日期时间类型基本上支持格里高利历,因此您可以拥有的最小值是1/1/1753。在2008年,SQLServer添加了一个支持回到第1年的datetime2数据类型(没有第0年)。听起来你正试图将一个17年1月1日之前的日期时间值插入到datetime(而不是datetime2)的SQLServer列中

答案 1 :(得分:17)

  

定义与基于24小时制的时间相结合的日期。 datetime2可以视为现有日期时间类型的扩展,它具有更大的日期范围,更大的默认小数精度和可选的用户指定精度。

http://technet.microsoft.com/en-us/library/bb677335.aspx

答案 2 :(得分:2)

来自technet

  

定义与基于24小时制的时间相结合的日期。 datetime2可以视为现有日期时间类型的扩展,它具有更大的日期范围,更大的默认小数精度和可选的用户指定精度。

我必须检查,因为我认为datetime2varchar2有某种关系。显然,根本就没有关系。

输入您的代码,以便我们猜出是什么导致了问题。

答案 3 :(得分:2)

您的数据库表是否有“DATETIME”或“SMALLDATETIME”列,并且您尝试插入超出范围的日期? DATETIME涵盖1753-1-1至9999-12-31,而SMALLDATETIME仅涵盖1900-1-1至2079-6-6。

新的SQL Server 2008 DATETIME2数据类型将涵盖0001-1-1到9999-12-31。

马克

答案 4 :(得分:0)

当我的数据库列创建为NOT NULL并且我在ADO.Entity框架EntityType中的DateTime属性上明确指定了Nullable = true时出现此错误。

要修复它,我将Nullable属性设置为=(无)