Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将datetime2数据类型转换为datetime数据类型导致值超出范围_C# - Fatal编程技术网

C# 将datetime2数据类型转换为datetime数据类型导致值超出范围

C# 将datetime2数据类型转换为datetime数据类型导致值超出范围,c#,C#,当我想保存Datetime时,我在数据库中有一种Datetime。现在一切正常。但当我想保存我的值时,我得到了一个错误 LogTime = log.AnswerTime ?? DateTime.Now 将datetime2数据类型转换为datetime数据类型导致值超出范围 日志时间值为:4/3/2013 12:05:04 PM 我认为一切都没问题,但为什么呢?在.NET DateTime2和DateTime中都映射到System.DateTime,所以没有任何

当我想保存
Datetime时,我在数据库中有一种Datetime。现在
一切正常。但当我想保存我的值时,我得到了一个错误

                LogTime = log.AnswerTime ?? DateTime.Now
将datetime2数据类型转换为datetime数据类型导致值超出范围

日志时间值为:
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在这方面为您提供了一些帮助,您可以在此处阅读

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

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

这不是错误的原因,因为在上面提供的代码中,空日志日期默认使用“DateTime.Now”
DateTime.Now
应该始终是SmallDateTime字段的有效值(除非您将电脑时钟设置回300年),但是,我目前在尝试将{04/10/2013 12:49:00}的“DateTime.Now”值保存到SQL SmallDateTime字段时遇到了完全相同的错误。令人沮丧的是,在这样的情况下,我在任何地方都找不到正确的答案。