SqlDateTime溢出,但我想要一个NULL或MinValue

时间:2011-01-12 20:09:14

标签: c# datetime sqldatetime

在这个项目中,我正在跟踪创建,编辑和最终处理的内容。我为此设置了三个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 个答案:

答案 0 :(得分:3)

为什么你不能发送空? AFAIK,Linq2SQL支持可空值类型;你只需要DB中的列可以为空,或者L2S不会以可空类型投射DAO。

您可以使用(DateTime)(SqlDateTime.MinValue)代替DateTime.MinValue。这将使用最小的SQL兼容的datetime值,显式地转换为DateTime。

虽然SqlDateTime和DateTime实际上都将时间存储为UInt64“Ticks”值,但两种类型之间的区别在于SQL Server使用不同的纪元(值为零)和不同的分辨率(1“tick”表示在比CLR的DateTime更多的分数。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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