问题描述
|
使用LINQ到实体。此代码为匿名类型
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在所有有效范围内。
谢谢,
标记
解决方法
它可以很好地解析字符串,但是不幸的是,有效的.net日期范围与有效的SQL日期范围不同。 email.MessageDate可能设置为DateTime.MinValue,它早于最早的有效SQL日期。
, 如果使用的是SQL 2008,则可以使用datetime2代替datetime类型。如果您无法更改SQL数据类型,则建议您滚动自己的\“ smart \” DateTime解析器。
, 这很难找到。答案是:
LINQ to Entities在不向具有DateTime字段的表提供Date信息方面存在一些问题。因此,即使您不需要在DateTime字段中放入数据,除非您这样做,否则Submit也不会起作用。因此,例如,在没有数据可提供的字段上,我所做的就是...
MessageDeliveryTime = null,
现在,让我着迷的另一件事是这个。我在数据库名称Created中有一列,该列自动用getdate()填充。 LINQ to Entities不在乎您的默认值很小。你必须传递一些东西;所以只要这样做:
Created = DateTime.Now
我希望我一生中消失的时光不会白费,这会帮助某个人。
标记