【问题标题】:SQL request - Display Dates with entry between two datesSQL 请求 - 显示两个日期之间条目的日期
【发布时间】:2019-12-02 11:59:06
【问题描述】:

我想取回开始和结束之间的所有日期以及开始和结束本身。由于某种原因,结果只显示开始和结束和结束之间的日期,但不显示开始。

我试图切换更大的然后,更小的然后是相等的符号,因为我无法解释错误应该在哪里

这是事件代码:


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 注入攻击。
  • 我希望结果显示在数据网格视图中。例如,如果我选择 22.07 作为开始和 25.07 作为结束,我会显示 23.07、24、25 但不是 22.07 条目
  • "您的代码容易受到 SQL 注入攻击。" oookay.. 它有什么问题?
  • 您的表中是否有 22.07 的条目?

标签: c# sql database date


【解决方案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);

【讨论】:

  • 否则每个人都可以只发送他想要的请求而不是预先定义的请求?
  • feedid.Parameters.AddWithValue("@start", start.AddDays(1));这不会使 22.07 成为 23.07 吗?
  • kk,你只要做到-1天而不是1天
  • ps.:参数似乎使响应变慢,是我自己还是这样?
猜你喜欢
  • 1970-01-01
  • 2020-05-01
  • 2016-07-29
  • 2021-08-18
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
相关资源
最近更新 更多