2013-04-17 35 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

相關問題