C# 在数据库中插入daterange之间的多个值

C# 在数据库中插入daterange之间的多个值,c#,asp.net,datetime,razor,webmatrix,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);

我有一个表格,以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 dateF=Convert.ToDateTimebookedFrom

知道我哪里出错了吗


谢谢

基于您的异常情况,您在请求的格式方面有一些问题。表单[dateFrom]值

例如,默认语言环境中的日期应为“dd/mm/yyyy”格式或类似格式

所以,若您确实知道这个参数中日期的格式,那个么最好使用类似的格式

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

只是我的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>"); 
    }
}

检查bookedFrom的值,其中包含什么?不是要在web表单的字段中输入什么,而是在这里显示的代码的前几行中,该变量包含什么?请查看使用Convert.ToDateTime执行DateTime.Parse,在本例中,使用当前区域性格式。对于DateTime.ParseExact,您必须提供格式提供程序,它将更加严格地进行匹配。我认为这不会有什么帮助。请使用明确的yyyy-MM-dd格式,而不是特定于语言环境且仅限美国的MM/dd/yyyy格式。DateTime.Parse2015-12-13将适用于任何地区,并返回2015年12月13日。您的预订来源是什么?您当前的文化背景是什么?与其使用非标准的美国格式,不如使用ISO 8601格式yyyy MM dd