1

在这个项目中,我正在跟踪创建、编辑和最终处理某些内容的时间。我为此设置了三个 DateTime 字段。下面的代码用于我创建记录时。

newsArchive.CreateDateTime = DateTime.Now;
newsArchive.ModifyDateTime = DateTime.MinValue;
newsArchive.SendDateTime = DateTime.MinValue;
naRepository.Add(newsArchive);
naRepository.Save();

我收到“SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。” 当我尝试添加它时。我知道我不能发送 NULL。你会怎么处理这个?

我正在使用 Linq2SQL 来处理这个。

4

4 回答 4

3

为什么不能发送空值?AFAIK,Linq2SQL 支持可为空的值类型;您只需要数据库中的列可以为空,否则 L2S 不会使用可空类型投影 DAO。

您可以使用 (DateTime)(SqlDateTime.MinValue) 而不是 DateTime.MinValue。这将使用与 SQL 兼容的最小日期时间值,显式转换为 DateTime。

Though both SqlDateTime and DateTime actually store time as a UInt64 "Ticks" value, the difference between the two types is that SQL Server uses a different epoch (value for zero) and a different resolution (what 1 "tick" represents in fractions of a second) than the CLR's DateTime.

于 2011-01-12T20:18:42.320 回答
2

您使用的是哪个版本的 SQL Server?如果您使用的是 SQL 2008(或 2008 R2),则可以使用datetime2数据类型,它可以支持所有的 .NET DateTime 类型。

否则,请使用 NULL(您的模型将需要具有 type 的属性Nullable<DateTime>)或在数据类型的限制范围内,并且 DateTime.MinValue 超出 SQL 日期时间类型的限制。

于 2011-01-12T20:17:14.380 回答
0

创建您自己的最小日期 - 值为 1/1/1753 12:00:00 AM 的 Date 变量并使用它代替 DateTime.MinValue

于 2011-01-12T20:11:56.973 回答
0

datetime2 数据类型允许最早的日期为 1 年。您还可以使用 DateTime 吗?在您的 .net 代码中允许空日期

于 2011-01-12T20:17:41.560 回答