SqlDateTime 溢出,但我想要 NULL 或 MinValue
在这个项目中,我跟踪某些内容的创建、编辑和最终处理时间。我为此设置了三个日期时间字段。下面的代码是我创建记录时的代码。
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 来处理这个问题。
On this project, I am tracking when something is created, edited, and finally processed. I have three DateTime fields setup for this. The code below is for when I create the record.
newsArchive.CreateDateTime = DateTime.Now;
newsArchive.ModifyDateTime = DateTime.MinValue;
newsArchive.SendDateTime = DateTime.MinValue;
naRepository.Add(newsArchive);
naRepository.Save();
I am getting "SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM." when I try to add it. I know I can't send a NULL. How would you handle this?
I am using Linq2SQL to process this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
为什么不能发送 null? AFAIK,Linq2SQL 支持可为 null 的值类型;你只需要数据库中的列可以为空,否则 L2S 不会用可以为空的类型来投影 DAO。
您可以使用 (DateTime)(SqlDateTime.MinValue) 而不是 DateTime.MinValue。这将使用最小的 SQL 兼容日期时间值,显式转换为 DateTime。
虽然 SqlDateTime 和 DateTime 实际上都将时间存储为 UInt64“Ticks”值,但这两种类型之间的区别在于 SQL Server 使用不同的历元(零值)和不同的分辨率(1 个“tick”代表的分数)第二)比 CLR 的 DateTime 更重要。
Why can't you send a null? AFAIK, Linq2SQL supports nullable value types; you just need the column in the DB to be nullable or L2S won't project the DAO with the nullable type.
You could use (DateTime)(SqlDateTime.MinValue) instead of DateTime.MinValue. This will use the minimum SQL-compatible datetime value, explicitly cast to 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.
您使用的是哪个版本的 SQL Server?如果您使用的是 SQL 2008(或 2008 R2),则可以使用 datetime2 数据类型,可以支持全范围的.NET DateTime 类型。
否则,请使用 NULL(您的模型需要具有
Nullable
类型的属性)或遵守数据类型的限制,并且 DateTime.MinValue 超出 SQL 日期时间类型的限制。Which version of SQL Server are you using? If you are using SQL 2008 (or 2008 R2) you can use the datetime2 data type which can support the full range of the .NET DateTime type.
Otherwise, use NULL (your model will need to have a property of type
Nullable<DateTime>
) or live within the limitations of the data type and DateTime.MinValue exceeds the limit of the SQL datetime type.创建您自己的最小日期 - 值为 1/1/1753 12:00:00 AM 的日期变量,并使用它代替 DateTime.MinValue
Create your own minimum date - a Date variable with value 1/1/1753 12:00:00 AM and use that instead of DateTime.MinValue
datetime2 数据类型允许早到第一年的日期。您还可以使用 DateTime?在 .net 代码中允许空日期
The datetime2 datatype allows dates as early as year 1. You can also use DateTime? to allow null dates in your .net code