【发布时间】: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语句中对一周中的每一天进行比较?那不是总是是真的吗? -
您应该考虑在数据库中将日期存储为
DATE或DATETIME,而不是将它们转换为字符串。
标签: c# sql-server winforms datetime datetimepicker