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