2013-03-25 39 views
0

I am trying to build a post method in a web api using c# on asp.net mvc 4.Whenever I post value to this api using fiddler I get the following error:SqlDateTime溢出。必須是1753年1月1日12:00:00 AM和12/31/9999下午11:59:59在網頁API之間

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM

I have written the following code in my web API controller.I have also created the data access layer to access the data in database

public HttpResponseMessage PostMsg(MsgModel item) 
    { 
     if (ModelState.IsValid && item!=null) 
     { 
      using (dc = new MsgDataContext()) 
      { 
       var dbMsg = new Msg() 
       { 
       Msg_Title= item.Msg_Title, 
       Msg_Date = item.Msg_Date,      
       };     
       dc.Msgs.InsertOnSubmit(dbMsg); 
       dc.SubmitChanges();// Getting the above error at this line of code 

       var response = Request.CreateResponse<MsgModel>(HttpStatusCode.Created, item); 
       string uri = Url.Link("DefaultApi", new { id = dbMsg.Msg_Id}); 
       response.Headers.Location = new Uri(uri); 
       return response; 
      } 
     } 
     else 
     { 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 

    } 

I am posting the following request body from fiddler by executing the 
url http://localhost:65070/api/signup Request Body { 
'Msg_Title':"our first msg", 'Msg_Date':"2012/02/23T00:00:00"} 
+2

調試你的方法我猜'item.Msg_Date'是DateTime.Min。或者你在'Msg'上有一些額外的日期時間字段,你不填寫。 – nemesv 2013-03-25 11:50:31

回答

0

錯誤本身講述瞭解決方案 -

你是指定不在這兩個日期之間的DateTime值。只需在插入數據庫之前檢查日期。如果日期小於1/1/1753,則傳遞DateTime.MinValue,如果日期大於12/31/9999,則傳遞DateTime.MaxValue

+0

使用DateTime.MinValue導致此錯誤 – LostNomad311 2014-09-09 17:45:33

+0

不,如果按照此處的指示進行操作,將會出現此錯誤。我知道這是事實,因爲這是我調試過的看起來合乎邏輯的代碼。 – LostNomad311 2014-09-12 01:12:45

0

傳遞的日期值'Msg_Date':"2012/02/23T00:00:00"未正確解析(作爲「已知」日期字符串) - 它沒有時區/不匹配任何「已知」date format

DateTime.TryParse

-1

使用的SqlTypes.SqlDateTime.MinValue代替DateTime.MinValue修復了這個問題對我來說。如果您已在代碼中使用DateTime對象,則可以使用SqlTypes.SqlDateTime.MinValue.Value

0

你的問題是你正在解析一個字符串到DateTime對象。如果Msg_Date是DateTime對象,則C sharp將嘗試隱式轉換。如果失敗,則返回null。但數據庫中的DateTime對象的空值不被允許,因此會出現此異常。在將實體保存到數據庫之前進行一些調試。找到一個適當的日期格式,因爲這似乎是你的問題。 檢查this後,或閱讀一些documentation

相關問題