15

最近我在尝试做时遇到了非常奇怪的错误db.SubmitChanges()

SqlDateTime 溢出。必须介于 1753 年 1 月 1 日上午 12:00:00 和 9999 年 12 月 31 日晚上 11:59:59 之间。

关键是,我只使用DateTime.Now在我的对象中设置属性,并且在调用Response.Write(DateTime.Now.ToString());它之后显示17-04-2013 18:03:13它应该是。

它以前没有发生,现在该功能总是中断。我完全一无所知 - 我的 SQL 服务器上的日期似乎没问题。

什么可能导致它?

编辑

我认为这没有帮助(IMO 出现任何错误太简单了),但这是我的功能:

public bool ReportLogIn(int UserID, string IP, int Succeed ... ) {
    A_UserLoginHistory Report = new A_UserLoginHistory();

    Report.IP = IP;
    Report.UserID = UserID;
    Report.Status = Succeed;
    Report.Date = DateTime.Now; //the only DateTime field
    ...

    try {
        db.A_UserLoginRegistry.InsertOnSubmit(Report);
        db.SubmitChanges();
        return true;
    } catch (Exception e) {
        ErrorLog.AddError(e.ToString());
        return false;
    }
}
4

2 回答 2

5

实际上问题是 SQL DateTime=/= C# Datetime

你需要改变两件事

  • 数据库将字段类型从更改DateTimeDateTime2

  • 查询您需要明确

    SqlCommand cmd = new SqlCommand("insertsomeDate", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@newDate", SqlDbType.DateTime2).Value = yourDate; //<- as example
    

您可以在此处此处此处找到更多信息

于 2013-04-18T09:10:36.387 回答
1

最有可能的是您忘记初始化日期字段 - 您确定已将它们全部设置并没有添加新的吗?当我向 DBML 添加一个新的日期字段时,我通常会得到这个,因为它试图插入 01/01/0001 00:00:00

如果这没有帮助,请在执行 DB.SubmitChanges 之前在 DB.Log 上设置一个 New StringWriter,然后检查 DB.Log.ToString(可以在调试器中执行)。这应该向您显示查询和所有参数(在底部),以便您可以看到匹配导致问题的参数。

有助于解决此类问题的另一件事是使用 DB.GetChangeSet() 在 SubmitChanges 调用之前检查哪些记录和被插入/更新(无法想象删除可能会导致这种情况)

于 2013-04-17T20:00:54.063 回答