我想获取开始和结束之间以及开始和结束本身之间的所有日期。由于某种原因,结果仅显示开始,结束和结束之间的日期,而不显示开始。
我试图在更大的那个,那个较小的那个和那个相等的符号之间切换,因为我无法解释错误应该在哪里
这是事件代码:
private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
{
string language = System.Globalization.CultureInfo.CurrentCulture.Name;
if (!(language == "de-DE"))
{
if (language == "es-ES")
{
}
else if (language == "en-GB")
{
DateTime start = monthCalendar1.SelectionStart;
DateTime end = monthCalendar1.SelectionEnd;
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
MySqlDataAdapter adapterid;
DataTable dtschichten = new DataTable();
MySqlCommand feedid = conn.CreateCommand();
feedid.CommandText = "SELECT id, datum, atotal, ptotal, total FROM arbeitszeiten WHERE fullname = '" + comboBox1.Text + "' and active = 'NEIN' and datum >= '" + start + "' and datum <= '" + end + "'";
adapterid = new MySqlDataAdapter(feedid);
adapterid.Fill(dtschichten);
dtschichten.Columns["id"].ColumnName = "ID";
dtschichten.Columns["datum"].ColumnName = "Shiftdate";
dtschichten.Columns["atotal"].ColumnName = "Worktime";
dtschichten.Columns["ptotal"].ColumnName = "Breaktime";
dtschichten.Columns["total"].ColumnName = "Total time";
BindingSource bSourceschichten = new BindingSource();
bSourceschichten.DataSource = dtschichten;
dataGridView.DataSource = bSourceschichten;
adapterid.Update(dtschichten);
DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 30;
conn.Close();
}
else
{
MessageBox.Show("Your language setting is currently not supported" + "\n" + "Please change your primary language setting for Windows" + "\n" + "\n" + "The Programm will shut down now !", "Critial Failure", MessageBoxButtons.OK, MessageBoxIcon.Stop);
this.Close();
}
}
else
{
DateTime start = monthCalendar1.SelectionStart;
DateTime end = monthCalendar1.SelectionEnd;
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
MySqlDataAdapter adapterid;
DataTable dtschichten = new DataTable();
MySqlCommand feedid = conn.CreateCommand();
feedid.CommandText = "SELECT id, datum, atotal, ptotal, total FROM arbeitszeiten WHERE fullname = '" + comboBox1.Text + "' and active = 'NEIN' and datum >= '" + start + "' and datum <= '" + end + "'";
adapterid = new MySqlDataAdapter(feedid);
adapterid.Fill(dtschichten);
dtschichten.Columns["id"].ColumnName = "ID";
dtschichten.Columns["datum"].ColumnName = "Schichtdatum";
dtschichten.Columns["atotal"].ColumnName = "Arbeitszeit";
dtschichten.Columns["ptotal"].ColumnName = "Pausenzeit";
dtschichten.Columns["total"].ColumnName = "Zeit gesammt";
BindingSource bSourceschichten = new BindingSource();
bSourceschichten.DataSource = dtschichten;
dataGridView.DataSource = bSourceschichten;
adapterid.Update(dtschichten);
DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 30;
conn.Close();
}
}
答案 0 :(得分:1)
使用SQL参数避免SQL注入,并出于简洁的目的使用BETWEEN。
MySqlCommand feedid = conn.CreateCommand();
feedid.CommandText = "SELECT id, datum, atotal, ptotal, total FROM arbeitszeiten WHERE fullname = @fullname and active = 'NEIN' and datum BETWEEN @start AND @end";
feedid.Parameters.AddWithValue("@fullname", comboBox1.Text);
feedid.Parameters.AddWithValue("@start", start.AddDays(1));
feedid.Parameters.AddWithValue("@end", end);