2016-06-10 2 views
1

Можете ли вы мне помочь, у меня есть кнопка для фильтрации данных с базой дат на моем 2 datetimepicker (datefrom и dateto), Ниже мой код, и когда я нажимаю кнопку, она отображает ничего. вы можете помочь мне в чем проблема? im новое в C#.Как фильтровать дату с помощью datetimepicker через базу данных

MySqlConnection mcon = new MySqlConnection("datasource=localhost;port=3306;username=8888;password=888888"); 
MySqlDataAdapter mda = new MySqlDataAdapter("select * from bio_db.daily_data2 where Date between '" + datefrom.Value.ToString() + "' and '" + dateto.Value.ToString() + "' ", mcon); 
mcon.Open(); 
DataSet ds = new DataSet(); 
mda.Fill(ds); 
dbgrid1.DataSource = ds; 
dbgrid1.Refresh(); 
mcon.Close(); 
+0

Что такое значение 'datefrom.Value' – Mairaj

+0

, чтобы получить значение из DateTimePicker, выбранного пользователем фильтроваться по дате. – Seryu

+0

Правильно ли это, когда вы копируете запрос 'mda' в sql в режиме отладки? – Hamed

ответ

0

Привет, ребята я уже выяснить пропущенная ссылка. Вот исправленный скрипт. Всем спасибо!

DateTime dtFrom = Convert.ToDateTime(datefrom.Text); //some DateTime value, e.g. DatePicker1.Text; 
DateTime dtTo = Convert.ToDateTime(dateto.Text); //some DateTime value, e.g. 
DatePicker1.Text;<n>MySqlConnection mcon = new MySqlConnection("datasource=localhost;port=3306;username=8888;password=8888888"); 
MySqlDataAdapter mda = new MySqlDataAdapter("select * from bio_db.daily_data2 where Date between '" + dtFrom.ToString("yyyy/MM/dd") + "' and '" + dtTo.ToString("yyyy/MM/dd") + "' ", mcon); 

     System.Data.DataSet ds = new System.Data.DataSet(); 
     mcon.Open(); 
     mda.Fill(ds, "root"); 
     dbgrid1.DataSource = ds.Tables["root"]; 
     dbgrid1.Refresh(); 
     mcon.Close(); 
1

Эта линия отсутствует:

MySqlCommandBuilder mcb = new MySqlCommandBuilder(mda); 

Источники:

https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-data-adapter.html http://www.techonthenet.com/mysql/between.php

Поэтому код должен быть:

MySqlConnection mcon = new MySqlConnection("datasource=localhost;port=3306;username=8888;password=888888"); 
string query = string.Format("select * from bio_db.daily_data2 where Date " 
          + "BETWEEN CAST('{0}' AS DATE) AND CAST('{1}' AS DATE) ", 
          dateFrom.Value.ToString("M/d/yyyy"), 
          dateTo.Value.ToString("M/d/yyyy")); 
MySqlDataAdapter mda = new MySqlDataAdapter(query, mcon); 
MySqlCommandBuilder mcb = new MySqlCommandBuilder(mda); //added code 
mcon.Open(); 
DataTable dt = new DataTable(); 
mda.Fill(dt); 
dbgrid1.DataSource = dt; 
dbgrid1.Refresh(); 
mcon.Close(); 
+0

спасибо, но все еще ничего не отображает. – Seryu

+0

Можете ли вы дать мне значение для datefrom.Value.ToString() и dateto.Value.ToString(), поэтому я могу настроить строку запроса? –

+0

как? это зависит от значения для пользователей, какую дату выбрать – Seryu

1

Ваша база данных имеет значение date как date type и вы сравниваете с stringdate, который не будет соответствовать.

Вы должны convertstart и end дату, date

select * from bio_db.daily_data2 where Date between STR_TO_DATE('" + datefrom.Value.ToString() + "','%m/%d/%Y') and STR_TO_DATE('" + dateto.Value.ToString() + "','%m/%d/%Y') " 

Вам нужно будет указать точный формат, который хранится в базе данных вместо '%m/%d/%Y'.

Использование параметризованных Sql

Ваш текущий код открыт для Sql injection было бы лучше использовать parameterized sql. Не связывайте значения вместо add parameters для запроса.

1

я думаю, что вам нужно конвертировать datefrom и dateto значения в формате Date Database и введите

+0

Я уже это сделал, сопоставил свой формат даты в моей базе данных, который является "MM-DD-YYYY", а мой datetimepicker в формате "Short", который является "MM -DD-YYYY " – Seryu

1

Вам нужно преобразовать dateFrom и dateTo значения в DateTime

DateTime dtFrom =Convert.ToDateTime(DatePicker1.Text); //some DateTime value, e.g. DatePicker1.Text; 
DateTime dtTo =Convert.ToDateTime(DatePicker2.Text); //some DateTime value, e.g. DatePicker1.Text; 
MySqlConnection mcon = new MySqlConnection("datasource=localhost;port=3306;username=8888;password=888888"); 
MySqlDataAdapter mda = new MySqlDataAdapter("select * from bio_db.daily_data2 where Date between '" + dtFrom.ToString("MM/dd/yyyy")+ "' and '" + dtTo.ToString("MM/dd/yyyy") + "' ", mcon); 
DataSet ds = new DataSet(); 
mda.Fill(ds); 
dbgrid1.DataSource = ds; 
dbgrid1.Refresh(); 
mcon.Close(); 
+0

он запускается, но ничего не отображается – Seryu

+0

проверьте свою систему' date' Format. Я думаю, вам нужно указать конкретный формат даты. Прокомментируйте свой «формат даты», после чего я соответствующим образом изменю свой ответ. –

+0

моя таблица данных имеет формат даты «MM/dd/yyyy» ex: данные 1/12/2016 1/23/2016 – Seryu

Смежные вопросы