C# 通过循环将monthcalendar中的日期添加到mdb

C# 通过循环将monthcalendar中的日期添加到mdb,c#,database,ms-access,oledb,C#,Database,Ms Access,Oledb,我目前正试图使用monthcalendar将多个日期添加到Access MdB中 其思想是,对于每个选定的日期,都将有一个条目插入数据库 这是我用来从monthcalendar获取范围的代码: public void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) { string start = monthCalendar1.SelectionRange.Start.ToShortDat

我目前正试图使用monthcalendar将多个日期添加到Access MdB中

其思想是,对于每个选定的日期,都将有一个条目插入数据库

这是我用来从monthcalendar获取范围的代码:

public void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
    {

        string start = monthCalendar1.SelectionRange.Start.ToShortDateString();
        string end = monthCalendar1.SelectionRange.End.ToShortDateString();

        DateTime startDay = Convert.ToDateTime(start); 
        DateTime endDay = Convert.ToDateTime(end); 

        while (startDay < endDay)
        {

            DateTime Day = startDay.AddDays(1);
            string Day1 = Day.ToShortDateString();}}
但是我不知道如何在每个选定日期执行代码,直到它到达结束日期……我很确定我必须更改datetimepicker1.text,但我不确定如何更改

我真的很感激每一个有用的答案。
提前谢谢大家。:)

你已经很接近了。只需在表单上添加两个
DateTime
变量来存储
startDay
endDay

public class Form1 : Form
{
    private DateTime _startDate {get; set;}
    private DateTime _endDate {get; set;}

    // your other code
}
并在用户选择日期范围时分配它们:

public void monthCalendar1\u DateSelected(对象发送方,DateRangeEventArgs e) {

string start=monthCalendar1.SelectionRange.start.toSortDateString();
string end=monthCalendar1.SelectionRange.end.ToSortDateString();
DateTime startDay=Convert.ToDateTime(开始);
DateTime endDay=Convert.ToDateTime(结束);
_开始日期=开始日期;
_endDate=endDay;
while(开始日<结束日)
{
DateTime Day=startDay.AddDays(1);
string Day1=Day.ToShortDateString();
}
}

然后您可以通过按钮的单击方法访问它们:

public void btn_speichern_Click(object sender, EventArgs e)    
{
    do 
    {
        //probably want a do..while here, so if they select a single day it still goes once.
        //now do your other stuff, and then increment _startDate

        _startDate = _startDate.AddDays(1);
    }
    while (_startDate <= _endDate)
}
public void btn\u speichern\u单击(对象发送者,事件参数e)
{
做
{
//在这里可能想做一件事,所以如果他们选择了一天,它仍然会去一次。
//现在做其他事情,然后增加开始日期
_startDate=_startDate.AddDays(1);
}

while(_startDate我建议您对日期(以及其他所有内容)使用参数化查询。这将为您省去很多麻烦。您可以自己编写一个方法,该方法在字典中获取值,然后加载命令参数。下面是日期的一个简单示例

  //_date is your date value and conS is your connection string
    public int InsertDate(DateTime _date, string conS) 
    {
          try
          {
                using (var cn = new OleDbConnection(conS))
                {
                      string queryString = "INSERT INTO... some_date_field=@dateparam"; //your query
                      var cmd = new OleDbCommand(queryString, cn);              
                      cmd.Parameters
                      .Add(new OleDbParameter("@dateparam", _date)); // add the parameter
                      cn.Open();
                      int res = cmd.ExecuteNonQuery();
                      return res;
                 }
         }
         catch
         {
               return -2; // if you get that you will know something has gone wrong
         }
    }

这只是一个插入日期字段的演示。

当您处理Access DB时,请始终使用参数化查询,始终!!当您处理日期时,仅解析值将给您带来大量麻烦,格式错误和数据类型不匹配的机会会让您头疼…感谢您的回答!不幸的是,如果我执行当我选择多个日期时,我的程序会冻结吗?我在我的“if(checkBox2.Checked==true)”之后实现了你的“do-while”代码……这是为什么?
public void btn_speichern_Click(object sender, EventArgs e)    
{
    do 
    {
        //probably want a do..while here, so if they select a single day it still goes once.
        //now do your other stuff, and then increment _startDate

        _startDate = _startDate.AddDays(1);
    }
    while (_startDate <= _endDate)
}
  //_date is your date value and conS is your connection string
    public int InsertDate(DateTime _date, string conS) 
    {
          try
          {
                using (var cn = new OleDbConnection(conS))
                {
                      string queryString = "INSERT INTO... some_date_field=@dateparam"; //your query
                      var cmd = new OleDbCommand(queryString, cn);              
                      cmd.Parameters
                      .Add(new OleDbParameter("@dateparam", _date)); // add the parameter
                      cn.Open();
                      int res = cmd.ExecuteNonQuery();
                      return res;
                 }
         }
         catch
         {
               return -2; // if you get that you will know something has gone wrong
         }
    }