2013-04-17 22 views
10
插入值时

最近我一直很奇怪的错误,同时试图做db.SubmitChanges()SQLDATETIME洋溢着DateTime.Now

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; 
    } 
} 
+1

http://stackoverflow.com/questions/3399061/error的可能重复-sqldatetime-overflow-must-be-between-1-1-1753-120000-am-and-12-31-999 –

+4

它可能是DMY/MDY相关的吗?即12-04-2013 18:03:13会好吗? – paul

+5

请记住,'db.SubmitChanges()'应用自上次调用'SubmitChanges()'以来的每个更改或创建了上下文。你可以通过查看'db.GetChangeSet()'来确定所有的变化。任何受影响的对象上的任何日期/时间列都可能是原因 - 例如,如果任何日期时间通过默认的DateTime.MinValue进行处理,则它超出了SQL Server的范围。 – mellamokb

回答

2

实际上问题是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 
    

你可以找到futher信息hereherehere

+0

更改类型为'datetime2'帮助,但我仍然不知道为什么它停止工作'datetime' – Lemurr

+0

@PabloLemurr也许有更新某处导致您的问题 – WiiMaxx

+0

DateTime2支持更广泛的日期(0001-01 -01到9999-12-31),这会建议传递给sql的日期实际上超出了DateTime的范围,可能是DateTime.MinValue)。 – sgmoore

1

最有可能的是,你有忘了初始化一个日期字段 - 你确定你已经设置了所有的日期并且没有添加新日期吗?当我向DBML中添加新的日期字段时,通常会得到此信息,因为它试图插入01/01/0001 00:00:00

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

,随着这种问题是使用DB.GetChangeSet()来检查哪些记录和插入/更新的SubmitChanges调用之前帮助另一件事(无法想象删除可能导致此)

+0

发送到我的数据库的日期是我在帖子中提供的格式,它不起作用,但是当我从SMSS手动插入行时,它工作正常。我有这个onyl DateTime字段那里开始导致问题。 – Lemurr

+0

你可以改变它使用ISO配置(YYYY-MM-DD)吗?我认为对于日期值 – wizzardmr42

+0

+1更可靠,忘记初始化DateTime字段是获取日期超出'SqlDateTime'范围的最常见方式。 – Joe

相关问题