LINQ to Entities中SQL的日期

时间:2011-06-16 14:46:09

标签: c# linq-to-entities

使用LINQ to Entities。此代码采用匿名类型

MessageDate = DateTime.Parse(email.MessageDate),

抛出此错误:

  

SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和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的字符串值为“Wed,15 Jun 2011 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在所有有效范围内。

谢谢你, 标记

3 个答案:

答案 0 :(得分:0)

正在解析字符串,但不幸的是,有效的.net日期范围与有效的SQL日期范围不同。 email.MessageDate可能设置为DateTime.MinValue,它早于最早的有效SQL日期。

答案 1 :(得分:0)

如果您使用的是SQL 2008,则可以使用datetime2而不是datetime类型。如果您无法更改SQL数据类型,那么我建议您使用自己的“智能”DateTime解析器。

答案 2 :(得分:0)

这非常难以找到。这是答案:

LINQ to Entities在将日期信息提供给具有DateTime字段的表时存在一些问题。因此,即使您不需要将数据放入DateTime字段,除非您这样做,否则提交将不起作用。所以我所做的一切,在我没有提供数据的领域,例如,这......

MessageDeliveryTime = null,

现在,让我这样的另一件事就是这个。我在数据库名称Created中有一个列,用getdate()自动填充。 LINQ to Entities不关心您的小默认值。你必须传递一些东西;所以这样做:

Created = DateTime.Now

我希望我生命中的岁月不会白费,这会帮助别人。

标记