gpt4 book ai didi

asp.net - 使用 LINQtoSQL 的日期时间超出范围问题

转载 作者:行者123 更新时间:2023-12-02 21:24:28 25 4
gpt4 key购买 nike

这是我的模型的片段:

* SQL Server *

Event
-----
Id (int, PK) NOT NULL
Title (varchar(100)) NULL
LastModified (datetime) NULL

EventDates
----------
Id (int, PK) NOT NULL
StartDate (datetime) NULL
EndDate (datetime) NULL

* C# *

Event
-----
public int Id
public string Title
public DateTime LastModified

EventDates
----------
public int Id
public DateTime StartDate
public Datetime EndDate

LastModified 字段自创建以来一直存在于数据库中。我在保存事件时一直保存它的值,但我想将其显示在表格中,因此我更改了事件存储库的 GetEvents 的返回值:

return (from e in GetDbEvents()
select new Event
{
// Miscellaneous fields..
LastModified = e.LastModified.GetValueOrDefault() // Shiny new code
});

当我现在打电话时,我会被骂:

The conversion of a char data type to a datetime data type 
resulted in an out-of-range datetime value.

如果我将上面的代码简化为这样,它仍然没有帮助,并且如果我尝试枚举结果,我会得到相同的错误:

var test = (from e in _db.Events
select e.LastModified.GetValueOrDefault());

作为测试,我对 EventDates 表执行了相同的语句(同样有 2 个日期时间列):

 var test4 = (from ed in _db.EventDates
select new EventDate
{
StartDate = ed.StartDate.GetValueOrDefault(),
EndDate = ed.EndDate.GetValueOrDefault()
});

当然,这很好用。我枚举时没有错误,所有值都是正确的。

我应该指出,Events 表中的一些 LastModified 值是 NULL,而 EventDates 中的所有值都是 NULL填充了数据。

编辑

我的主要问题是,为什么 Events 会出现超出范围的问题,而 EventDates 却不会,即使模型非常相似?

最佳答案

问题出在 GetValueOrDefault() 上。这将返回 DateTime.MinValue (01-01-0001) 在“默认”情况下,sqlserver 不接受这一点(它拒绝大约 1753 年之前的日期)。

如果您使用 Nullable<DateTime> ,那么 sql 就会对 null 感到满意它会得到。

关于asp.net - 使用 LINQtoSQL 的日期时间超出范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com