Linq to sql 使用Linq to SQL DataContext在日期正确时插入SqlDateTime溢出

Linq to sql 使用Linq to SQL DataContext在日期正确时插入SqlDateTime溢出,linq-to-sql,insert,sqldatetime,Linq To Sql,Insert,Sqldatetime,在执行SubmitChanges()时,使用连接到SQL Server数据库的Linq DataContext执行插入时,我收到一个SqlDateTime溢出错误(必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间) 使用调试器时,日期值是正确的。即使我临时更新代码将日期值设置为DateTime。现在它也不会执行插入操作 有人找到了解决这种行为的办法吗?也许有一种方法可以检查datacontext提交给数据库的SQL。是否在设计器中将字段设置为自动

在执行SubmitChanges()时,使用连接到SQL Server数据库的Linq DataContext执行插入时,我收到一个SqlDateTime溢出错误(必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间)

使用调试器时,日期值是正确的。即使我临时更新代码将日期值设置为DateTime。现在它也不会执行插入操作


有人找到了解决这种行为的办法吗?也许有一种方法可以检查datacontext提交给数据库的SQL。

是否在设计器中将字段设置为自动生成?如果这不是问题所在,我建议将数据上下文操作的日志记录设置到控制台,并检查生成的实际SQL以确保它正在插入该列,然后回溯以查找问题

 context.Log = Console.Out;

FWIW,我经常在设计器中将我的“CreatedTime”和“LastUpdateTime”列设置为自动生成(和只读),并为它们提供适当的默认值,或者使用DB触发器在插入或更新时设置值。将其设置为自动生成时,即使已修改,也不会将其包含在插入/更新中。如果列不允许空值,则需要提供另一种设置值的方法,从而设置默认约束和/或触发器。

您确定查看的是正确的日期列吗?有一次发生在我身上,错误是由另一个不可为空的日期列引起的,该列在提交之前没有设置。

我最近遇到了这个问题。 错误可能会说“有什么东西阻止了保存!”。因为在我的例子中,问题不是DateTime值

我以为我在为主键传递一个值,到达的是“null”。作为密钥,它不能为空-因此我的问题完全是在其他地方。通过解析空值,问题消失了

我们都讨厌误导性错误——这就是其中之一


最后,作为一项建议。。。如果您确实发现日期转换有问题,那么就不要使用日期。NET的DateTime类支持“Ticks”值。它还可以实例化一个新的日期时间(ticks);也唯一的问题是,Javascript中的ticks实现在历史上有着不同的起点。因此,如果您曾经尝试将日期时间从c#转换为Javascript,那么您可能需要在刻度之间进行转换

我建议您更改项目的目标框架。也许SQL Server比.Net Framework更新。我也看到了你的问题:
我的项目的目标框架是3.5。
SQL Server是2012


然后我改成4.0。问题已经解决。

底线:注意调用SubmitChanges()的顺序,确保所有要“提交”的对象都已准备好提交。当我在设置新的LINQ对象的属性(例如,新的“TBLACTACK”的“.FrestNead”)时,经常发生这种情况,然后一些条件逻辑需要创建一个单独的、相关的记录(例如,一个新的“TBLADATE”记录),因此代码创建“TBLADATE”并尝试提交更改()。保存该记录时,SubmitChanges()还会尝试插入未完成的“tblContact”记录,该记录可能尚未设置所需的“BirthDate”字段值。因此,当我插入“tblAddress”对象/记录时,异常看起来会发生,但实际上是指“tblContact”对象/记录缺少“生日”。

记录数据上下文完成了这项工作。我发现上下文为每行触发了两个插入,一个包含列值,另一个不包含列值。我设法重写了代码,现在它可以工作了。谢谢你的帮助,简