【问题标题】:c# Select sql database data using datetimepicker set with date rangec#使用日期范围设置的datetimepicker选择sql数据库数据
【发布时间】:2016-10-13 07:08:53
【问题描述】:

我正在尝试制作 c# 程序,我必须在其中制作要在 datagridview 上预览的数据库报告。将使用 datetimepicker 选择数据。我已经编写了代码,它可以工作,但是如果选择的日期是不同的月份。没有记录出现

void FilterDBbtnClick(object sender, EventArgs e)
{
        MySqlConnection conn = new MySqlConnection();
    
        conn = new MySqlConnection(cs);
        
        string data = "SELECT `Date`, `Process`, `Actual`, `Target` FROM `database` WHERE `Date` BETWEEN '"+this.fromDatePicker.Value+"' AND  '"+this.toDatePicker.Value+"' order by `Date` desc";
        

        MySqlCommand cmd = new MySqlCommand(data, conn);
        
        
        cmd.Connection.Open();
            
        try
        {
            
          MySqlDataAdapter sda = new MySqlDataAdapter();
          sda.SelectCommand = cmd;          
          DataSet dt = new DataSet();
          sda.Fill(dt);
          BindingSource bsource = new BindingSource();
          bsource.DataSource = dt;
          mondeDataTable.DataSource = dt.Tables[0];
          sda.Update(dt);
        
        }
        
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        
        
        cmd.Connection.Close();
}

请帮我检查我的代码并告诉我可能有什么问题或遗漏。

【问题讨论】:

  • 检查什么是 sql 注入,也使用调试看看为什么没有任何反应。你也应该处理你的 MySqlDataAdapter。
  • 您的Date 格式和fromDatePicker.Value 格式是什么。如果它们不同,例如 '2016-10-13 00:00:00.000''2013-10-13 09:50:00.000',查询可能返回 0 行.
  • 我已将其设置为仅日期,不包括时间。
  • 调试您的代码并在 Db 中运行您的查询变量结果
  • 我也尝试过,同样的事情发生了,每当我写不同的月份时,都不会出现数据。有选择不同月份的代码吗? is between 不适用吗?

标签: c# mysql datagridview


【解决方案1】:

使用分析器检查命中数据库的查询。我怀疑这是日期格式问题。

也许this question 可以帮助您记录命中数据库的查询:

【讨论】:

    【解决方案2】:

    希望这会有所帮助:

    Select * from [Table] where StartDate between '06/13/2016' and '10/13/2016'
    

    上述查询获取 06 到 10 个月之间的记录。确保 data variable 中的字符串采用上述格式。数据库中的列类型也是date

    检查并删除特殊字符(如果有)。

    如果您觉得这很有用,请将其标记为答案。

    【讨论】:

      【解决方案3】:

      为您的选择查询试试这个。我更改了您的一个选择变量,因为它对于 Date 数据类型不明确。

      void FilterDBbtnClick(object sender, EventArgs e)
      {
              MySqlConnection conn = new MySqlConnection();
      
              conn = new MySqlConnection(cs);
      
      
              //string data = "SELECT `Date`, `Process`, `Actual`, `Target` FROM `database` WHERE `Date` BETWEEN '"+this.fromDatePicker.Value+"' AND  '"+this.toDatePicker.Value+"' order by `Date` desc";
      
              //Changed query for getting data from DB according to the date 
              string data = "SELECT CreatedDate, Process, Actual, Target FROM database WHERE DATE_FORMAT(CreatedDate,'%Y-%m-%d') BETWEEN '"+this.fromDatePicker.Value.ToString("yyyy-MM-dd")+"' AND  '"+this.toDatePicker.Value.ToString("yyyy-MM-dd")+"' order by CreatedDate desc";
      
      
              MySqlCommand cmd = new MySqlCommand(data, conn);
      
      
              cmd.Connection.Open();
      
              try
              {
      
              MySqlDataAdapter sda = new MySqlDataAdapter();
              sda.SelectCommand = cmd;            
              DataSet dt = new DataSet();
              sda.Fill(dt);
              BindingSource bsource = new BindingSource();
              bsource.DataSource = dt;
              mondeDataTable.DataSource = dt.Tables[0];
              sda.Update(dt);
      
              }
      
              catch (Exception ex)
              {
                  Console.WriteLine(ex.Message);
              }
      
      
              cmd.Connection.Close();
      }
      

      【讨论】:

      • 感谢代码,我试过了,但仍然出现“无法将 MySQL 日期/时间值转换为 System.DateTime”的错误。希望你仍然可以帮助我。
      • 也许这可以帮助你stackoverflow.com/questions/5754822/…
      • 使用“Convert(varchar(10),CreatedDate,120)”的“DATE_FORMAT(CreatedDate,'%Y-%m-%d')”插入。我已经根据 SQL server 给出了解决方案,所以我更改了代码。我希望它能解决你的问题。
      • @dann11:你有没有再次尝试解决方案。我已将代码更改为 MySql 。
      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 2014-02-21
      • 2017-07-09
      • 2011-01-05
      • 2014-12-13
      相关资源
      最近更新 更多