0

我正在尝试在 asp.net mvc 4 上使用 c# 在 web api 中构建一个 post 方法。每当我使用 fiddler 向这个 api 发布值时,我都会收到以下错误:

SqlDateTime 溢出。必须在 1753 年 1 月 1 日上午 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间

我在我的 Web API 控制器中编写了以下代码。我还创建了数据访问层来访问数据库中的数据

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"}
4

4 回答 4

0

您的问题是您正在将字符串解析为 DateTime 对象。If Msg_Dateis a DateTime object C sharp 将尝试隐式转换。如果失败,将返回 null。但是数据库中的 DateTime 对象的空值是不允许的,因此会出现此异常。在将实体保存到数据库之前进行一些调试。找到合适的日期格式,因为这似乎是您的问题。检查这篇文章,或阅读一些文档

于 2015-01-02T14:12:35.447 回答
0

错误本身告诉解决方案-

您分配的 DateTime 值不在这两个日期之间。只需在插入数据库之前检查日期。如果日期小于 1753 年 1 月 1 日,则传递 DateTime.MinValue,如果日期大于 9999 年 12 月 31 日,则传递 DateTime.MaxValue

于 2013-03-25T12:03:56.653 回答
0

您传递的日期值'Msg_Date':"2012/02/23T00:00:00"参数未正确解析(作为“已知”日期字符串) - 它没有时区/不匹配任何“已知”日期格式

DateTime.TryParse

于 2013-03-25T13:59:19.490 回答
-1

使用SqlTypes.SqlDateTime.MinValue而不是DateTime.MinValue为我解决了这个问题。如果您已经在代码中使用对象,SqlTypes.SqlDateTime.MinValue.Value则可以使用。DateTime

于 2014-09-09T17:47:17.900 回答