一千萬個為什麽

搜索

使用LINQtoSQL超出範圍的Datetime問題

這真讓我感到困惑。這是我的模型的片段:

* 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個datetime列):

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

當然,這很好用。枚舉時沒有錯誤,所有值都是正確的。

我應該指出 Events 表中的一些 LastModified 值是 NULL ,而 EventDates 中的所有值都填充了數據。

我錯過了什麽基本的東西?提前致謝!

EDIT My main question is why does Events give me out-of-range issues and EventDates does not, even though the model is quite similar?

最佳答案

問題出在GetValueOrDefault()上。這將在“默認”情況下返回 DateTime.MinValue (01-01-0001),並且sqlserver不接受(它拒絕約1753之前的日期)。

If you use a Nullable, then sql will be happy with the null it will get.

轉載註明原文: 使用LINQtoSQL超出範圍的Datetime問題