【发布时间】:2013-04-17 16:09:48
【问题描述】:
最近我在尝试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;
}
}
【问题讨论】:
-
可能与 DMY/MDY 相关吗?即 12-04-2013 18:03:13 可以吗?
-
请记住,
db.SubmitChanges()会应用自您上次调用SubmitChanges()或创建上下文以来的所有更改。您可以通过查看db.GetChangeSet()来确定涉及的所有更改。任何受影响对象上的任何日期/时间列都可能是原因 - 例如,如果任何日期时间以默认值DateTime.MinValue出现,则它超出了 SQL Server 的范围。 -
@mellamokb - 它位于一个仅在此数据库表对象上运行的函数中
-
要检查的东西。检查您的模型和数据库是否正确(如果它们使用日期,那么 Linq 应该使用 Sql 参数生成 TSQL,这意味着服务器的配置方式并不重要)。如果您要插入新记录,请检查没有其他尚未初始化的日期/日期时间列。检查当您进行更改(例如触发器等)时没有执行其他 Sql。
-
尝试运行 SQL Profiler 以获取对数据库的所有调用。这会告诉您何时出现此异常以及原因。