1

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

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

有没有人找到解决这种行为的方法?也许有一种方法可以检查数据上下文提交给数据库的 SQL。

4

5 回答 5

1

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

 context.Log = Console.Out;

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

于 2010-03-23T11:39:41.740 回答
1

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

于 2010-03-23T11:49:35.187 回答
0

我最近遇到了这个。该错误也可能会说“某些东西阻止了保存!”。因为在我的情况下,问题不是 DateTime 值。

我以为我正在为主键传递一个值,而到达的是“null”。作为关键,它不能为空 - 所以我的问题完全出在其他地方。通过解决null,问题就消失了。

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

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

于 2013-01-24T13:34:21.273 回答
0

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

然后我更改为 4.0。问题解决了。

于 2014-08-23T02:11:47.780 回答
0

底线:注意您对 SubmitChanges() 的调用顺序,并确保所有将“提交”的对象实际上都已准备好提交。当我正在设置新 LINQ 对象的属性(例如,新“tblContact”的“.FirstName”)时,这经常发生在我身上,然后一些条件逻辑需要创建单独的相关记录(例如,一个新的“tblAddress”记录),因此代码会创建“tblAddress”并尝试在保存该记录时使用 SubmitChanges(),但是 SubmitChanges() 然后也尝试插入未完成的“tblContact”记录,这可能尚未设置必需的“出生日期”字段值。因此,当我插入“tblAddress”对象/记录时,似乎会发生异常,

于 2017-04-19T18:11:57.693 回答