2016-10-13 39 views
0

我想要使c#程序,我必须使数据库报告在datagridview预览。数据将使用datetimepicker进行选择。我写了代码,它的工作原理,但如果选择的日期是不同的月份。没有记录出现c#使用datetimepicker选择sql数据库数据设置日期范围

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(); 
    } 

请帮我检查我的代码,并告诉我什么可能是错的或丢失。

+2

检查什么是SQL注入,也使用调试,看看为什么没有发生..你应该处置你的MySqlDataAdapter了。 – mybirthname

+0

什么是您的'日期'格式和'fromDatePicker.Value'格式。如果它们不同于**'2016-10-13 00:00:00.000'**和**'2013-10-13 09:50:00.000'**,查询可能会返回0行。 – Badiparmagi

+0

我已经将它设置为只是日期,并且没有包括时间。 – dann11

回答

0

使用事件探查器检查命中数据库的查询。我怀疑这是一个日期格式问题。

也许this question可以帮助你记录击中数据库查询:

+0

谢谢。是的,这实际上是关于日期格式。 – dann11

0

希望这有助于:

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

上面的查询获取月06和10之间的记录确保在该字符串data variable是以上格式。此外,数据库中的列类型为date

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

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

0

试试这个为您的选择查询。我更改了一个选择变量,因为它对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(); 
} 
+0

感谢您的代码,我试过了,但仍然出现“无法将MySQL日期/时间值转换为System.DateTime”的错误。希望你仍然可以帮助我。 – dann11

+0

可能是这可以帮助你http://stackoverflow.com/questions/5754822/unable-to-convert-mysql-date-time-value-to-system-datetime –

+0

使用“DATE_FORMAT(CreatedDate,'%Y-% m-%d')“插入”Convert(varchar(10),CreatedDate,120)“。我根据SQL服务器给出了解决方案,所以我更改了代码。我希望它能解决你的问题。 –