使用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在所有有效范围内。
谢谢你, 标记
答案 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
我希望我生命中的岁月不会白费,这会帮助别人。
标记