2011-06-16 40 views
1

使用LINQ to Entities。這段代碼在一個匿名類型LINQ to Entities中SQL的日期爲

MessageDate = DateTime.Parse(email.MessageDate), 

引發此錯誤:

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

MessageDate是SQL DateTime和email.MessageDate是一個字符串。

我試過,但它並沒有幫助:

MessageDate = DateTime.Parse(string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", DateTime.Parse(email.MessageDate))) 

任何援助表示讚賞。


更多信息:

email.MessageDate的字符串值是 「星期三,2011年6月15日13點29分00秒-0400」

另外,如果我只是做

MesssageDate = Date.Now 

我得到同樣的錯誤。

此外,它是SQL Server 2005中


更多的測試:我設置一個斷點,看看有什麼解決的真

var x = 1; 
if (DateTime.Now > System.Data.SqlTypes.SqlDateTime.MinValue.Value) 
    x = 1; // True 
if (DateTime.Now < System.Data.SqlTypes.SqlDateTime.MinValue.Value) 
    x = 1; 
if (DateTime.Now > System.Data.SqlTypes.SqlDateTime.MaxValue.Value) 
    x = 1; 
if (DateTime.Now < System.Data.SqlTypes.SqlDateTime.MaxValue.Value) 
    x = 1; // True 
if (DateTime.Now < DateTime.MinValue) 
    x = 1; 
if (DateTime.Now > DateTime.MinValue) 
    x = 1; // True 
if (DateTime.Now < DateTime.MaxValue) 
    x = 1; // True 
if (DateTime.Now > DateTime.MaxValue) 
    x = 1; 

因此,它看起來對我來說,DateTime.Now是內的所有有效範圍。

謝謝 馬克

回答

0

這是很荒唐的很難找到。這裏是答案:

LINQ to Entities有一些問題,不提供日期信息到具有日期時間字段的表。因此,即使您不需要將數據放入日期時間字段中,除非您提交,否則提交將無法正常工作。所以,我所做的,在哪裏我沒有數據提供等領域,是,例如,這個......現在

MessageDeliveryTime = null, 

,這讓我的另一件事情是這樣的。我在數據庫名稱中創建了一個使用getdate()自動填充的列。 LINQ to Entities不關心你的小默認值。你必須通過某件事;所以只是這樣做:

Created = DateTime.Now 

我希望這是走了我生命中的時間不白白去,這將幫助別人。

馬克

0

它解析字符串罰款但遺憾的是有效的.NET日期範圍是不一樣的有效SQL日期範圍。 email.MessageDate可能設置爲早於最早有效SQL日期的DateTime.MinValue。

+0

這是email.MessageDate 「星期三,2011年6月15日十三時29分00秒-0400」 – user390480 2011-06-16 14:56:47

+1

'DateTime.Parse(email.MessageDate)的值'是有效的SQL之外,返回日期日期範圍。使用調試器來找出它返回的內容。您可能希望將CultureInfo傳遞給DateTime.Parse(),以強制它以您想要的方式解釋日期,而不是使用運行代碼的任何機器的區域性信息。 – 2011-06-16 15:04:54

0

如果您使用SQL 2008,則可以使用datetime2而不是datetime類型。如果你不能改變你的SQL數據類型,那麼我建議你滾動你自己的「智能」DateTime分析器。

+0

使用SQL Server 2005 – user390480 2011-06-16 17:05:06