【问题标题】:SqlDateTime overflow on INSERT when date is correct using a Linq to SQL DataContext使用 Linq to SQL DataContext 当日期正确时,插入时的 SqlDateTime 溢出
【发布时间】:2010-03-23 11:35:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: linq-to-sql insert sqldatetime


    【解决方案1】:

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

     context.Log = Console.Out;
    

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

    【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多