在daterange中插入多个值到DB

时间:2015-07-07 15:44:42

标签: c# asp.net datetime razor webmatrix

我有一个表单,以mm / dd / yyyy

格式收集2个日期(开始日期和结束日期)

我想从表单中收集这两个日期,然后创建这两天之间所有日期的列表,然后将它们插入到mt数据库中的单独行中。这是我的代码:

if(IsPost){
    var bookedFrom = Request.Form["dateFrom"];
    var bookedTo = Request.Form["dateTo"];

    DateTime dateF = Convert.ToDateTime(bookedFrom);
    DateTime dateT = Convert.ToDateTime(bookedTo);

    var dates = new List<DateTime>();

    for (var dt = dateF; dt <= dateT; dt = dt.AddDays(1))
    {
       dates.Add(dt);
    }

    foreach(var dat in dates){
        db.Execute("INSERT INTO Property_Availability (PropertyID, BookedDate, BookedNotes, BookedType) VALUES (@0, @1, @2, @3)", rPropertyId, dat, Request.Form["BookedNotes"], Request.Form["BookedType"]);
    }
}

然而,当我尝试发布我的表单时,我收到以下错误:

  

字符串未被识别为有效的DateTime。   DateTime dateF = Convert.ToDateTime(bookedFrom);

知道我哪里出错了吗?

由于

2 个答案:

答案 0 :(得分:0)

只需要我2美分的帮助你,也可以考虑使用debug来知道是否传递了什么值。等等。

 if(IsPost){
    DateTime pFrom = new DateTime();
    DateTime pTo = new DateTime();

    var bookedFrom = Request.Form["dateFrom"];
    var bookedTo = Request.Form["dateTo"];

    if(DateTime.TryParse(bookedFrom, out pFrom) && DateTime.TryParse(bookedTo, out pTo))
    {
        DateTime dateF = pFrom;
        DateTime dateT = pTo;

        var dates = new List<DateTime>();

        for (var dt = dateF; dt <= dateT; dt = dt.AddDays(1))
        {
           dates.Add(dt);
        }

        foreach(var dat in dates){
            db.Execute("INSERT INTO Property_Availability (PropertyID, BookedDate, BookedNotes, BookedType) VALUES (@0, @1, @2, @3)", rPropertyId, dat, Request.Form["BookedNotes"], Request.Form["BookedType"]);
        }
    }
    else
    {
        Response.Write("<script language=javascript>alert('Invalid date from : " + bookedFrom + " and date to : " + bookedTo + "');</script>"); 
    }
}

答案 1 :(得分:-1)

根据您的例外情况,您在Request.Form [&#34; dateFrom&#34;]值的格式方面存在一些问题。

例如,您的默认语言环境中的日期应采用格式&lt; dd / mm / yyyy&#39;或类似的东西。

因此,如果你确切地知道这个参数中的日期格式,那么最好使用类似的东西

DateTime dateF = DateTime.ParseExact(bookedFrom, "MM/dd/yyyy", CultureInfo.InvariantCulture);