【问题标题】:How to populate a range of dates in a column using two dateTimePickers?如何使用两个 dateTimePickers 填充列中的日期范围?
【发布时间】:2019-04-24 22:59:17
【问题描述】:

我必须使用 SQL Server、WinForms 和两个 DateTimePickers 在列中填充日期范围。第一个 DateTimePicker 是范围的开始日期,第二个是范围的结束日期,并且必须在列中插入所有日期,这些日期包括在第一个 DateTimePicker 和第二个 DateTimePicker 中选择的日期之间。

我已经尝试使用下面显示的代码来实现它,但它不起作用:

private void button1_Click(object sender, EventArgs e)
    {
        using (SqlConnection con = new SqlConnection(@"Data Source =.\SQLEXPRESS01; Initial Catalog = Vagtplan; Integrated Security = True"))

        {
            DateTime startDate = dateTimePicker1.Value;
            DateTime finishDate = dateTimePicker2.Value;
            DateTime finishDate1 = finishDate.AddDays(+1);
            DateTime countDate = dateTimePicker1.Value;

           while (!countDate.ToString().Equals(finishDate1.ToString()));
                {
                    if ((countDate.DayOfWeek == DayOfWeek.Monday) | (countDate.DayOfWeek == DayOfWeek.Tuesday) 
                        | (countDate.DayOfWeek == DayOfWeek.Wednesday) | (countDate.DayOfWeek == DayOfWeek.Thursday)
                        | (countDate.DayOfWeek == DayOfWeek.Friday) | (countDate.DayOfWeek == DayOfWeek.Saturday) | (countDate.DayOfWeek == DayOfWeek.Sunday))
                    {
                        SqlCommand command = new SqlCommand("INSERT INTO [Vagter] ([Dato]) VALUES ('" + countDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "')", con);
                        con.Open();
                        command.ExecuteNonQuery();
                        con.Close();
                    }
                    countDate = countDate.AddDays(1.0);
                }

                MessageBox.Show("Vagtplanen er oprettet");

        }



    }

预期结果是填充列中第一个 DateTimePicker 中选择的日期和第二个 DateTimePicker 中选择的日期之间的所有日期。现在什么都没有发生。现在显示错误,什么都没有。

【问题讨论】:

  • 仅供参考,在您的代码中,您定义了startDate,但从不使用它。
  • 不要将日期转换为字符串来比较它们。 while (!countDate.Equals(finishDate1)) 应该可以正常工作。
  • while 语句后面有一个分号(在以while 开头的行的末尾),这实际上创建了一个无限循环。这就是为什么“什么都没有发生”。删除那个分号,然后重试。
  • 为什么在if 语句中对一周中的每一天进行比较?那不是总是是真的吗?
  • 您应该考虑在数据库中将日期存储为DATEDATETIME,而不是将它们转换为字符串。

标签: c# sql-server winforms datetime datetimepicker


【解决方案1】:

问题是在while 行末尾的分号。只需将其删除。

因为里面有分号,括号里面的代码不会被执行,循环会重复执行。

替换:

while (!countDate.ToString().Equals(finishDate1.ToString()));

与:

while (!countDate.ToString().Equals(finishDate1.ToString()))

【讨论】:

  • 此代码可以而且应该改进。比较日期为字符串,|运算符、sql 注入、SOLID 原则、缺少 using 语句、硬编码连接字符串、定义不必要的变量等等。
  • 事实上,列 [Dato] 在数据库中被定义为数据类型 DATE,这也是表的 [Vagter] 主键....您将如何改进此代码?
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2022-11-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多