使用DateTime.Now插入值时SqlDateTime溢出

时间:2013-04-17 16:09:48

标签: c# sql linq

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

  

SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。

关键是,我只使用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;
    }
}

2 个答案:

答案 0 :(得分:3)

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

你需要改变两件事

  • 数据库将字段类型从DateTime更改为DateTime2

  • 查询您需要明确

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

您可以找到更多信息hereherehere

答案 1 :(得分:1)

最有可能的是你忘了初始化一个日期字段 - 你确定你已经设置了所有这些并且还没有添加新的字段吗?我通常在向DBML添加新的日期字段时尝试插入01/01/0001 00:00:00

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

另一个有助于解决此类问题的方法是使用DB.GetChangeSet()来检查在SubmitChanges调用之前插入/更新的记录(无法想象删除可能导致此问题)