c# - SQL 请求 - 显示两个日期之间条目的日期
问题描述
我想取回开始和结束之间的所有日期以及开始和结束本身。出于某种原因,结果仅显示开始和结束和结束之间的日期,但不显示开始。
我试图切换更大的然后更小并且是相等的符号,因为我无法解释错误应该在哪里
这是事件代码:
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();
}
}
解决方案
使用 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);
推荐阅读
- python - 我想重新定义 int64 数组的列表,所以数组中的值是排序的,并且只包含不是 False 的值
- scala - 优雅地停止 Akka 流
- image - 如何将通过表单上传的图像嵌入到谷歌文档/自动生成 PDF?
- package - RMarkdown - 不可能编织
- javascript - onclick=document.getElementById 找不到 id
- node.js - 本地主机:3000 没有响应
- python - ImportError:无法从“conda._vendor.tqdm”(未知位置)导入名称“tqdm”
- javascript - Angular viewChild 获取由 *ngIf="asynchronous variable" 嵌套的 DOM 元素
- mysql - 运行 migrate.py 时出现 Django 和 MeMSQL 错误:django.db.utils.OperationalError:(2012,“服务器握手错误”)
- python-3.x - 编写一个显示 15 个近似值的列表