Goran Bibic Ответов: 1

Фильтр datatable из текстового поля и datetime picker C#


Filter datatable from text box and datetime picker


Какая-то помощь?

Что я уже пробовал:

private void izvjestajoprodanimartiklima()  
       {  
           using (SqlConnection openCon = new SqlConnection(cs))  
  
           {  
  
               String saveStaff = "SELECT  roba as 'Naziv artikla', SUM (cast(kolicina as float)) as 'Kolicina' from (select roba, kolicina from mp_racun_roba union all select roba, kolicina from mp_faktura_roba) as alltables group by roba";  
  
  
  
  
               if (!string.IsNullOrEmpty(textBox1.Text))  
               {  
                   saveStaff += "roba LIKE '%" + textBox1.Text + "%' ";  
               }  
  
  
               if (checkBox1.Checked)  
               {  
                   String strFilterDTP1 = dateTimePicker1.Value.ToString("yyyy-MM-dd");  
                   String strFilterDTP2 = dateTimePicker2.Value.ToString("yyyy-MM-dd");  
  
    
  
                   saveStaff += strFilterDTP1 + " 00:00:00' AND '" + strFilterDTP2 + " 23:59:59' ";  
                    
               }  

1 Ответов

Рейтинг:
11

0x01AA

1.) saveStaff += "roba LIKE '%" + textBox1.Text + "%' ";
Ты забыла об этом. WHERE а также пробел перед "робой"

2.) конкатенация строк SQL с пользовательским вводом опасна и обычно создает проблемы , когда пользовательский ввод содержит, например,"John'S", но я думаю, что вы это знаете.
Лучше использовать параметризованные запросы, которые также избавят вас от проблем с форматированием даты и времени.


Goran Bibic

Неправильный синтаксис около ключевого слова "где".

saveStaff += " WHERE roba LIKE '%" + textBox1.Text + "%' ";

0x01AA

GROUP BY должно быть в конце концов
ВЫБИРАТЬ
х,у,Z
От скрещ.
Где это и то
ГРУППЫ ...
ЗАКАЗЫВАЙТЕ САМИ ....

Подробности смотрите здесь: SQL GROUP BY оператор[^]

Goran Bibic

Да, я нахожу это...как решить rest off the code

если (checkBox1.Проверено)
{
Строка strFilterDTP1 = dateTimePicker1.Value.ToString("гггг-ММ-ДД");
Строка strFilterDTP2 = dateTimePicker2.Value.ToString("гггг-ММ-ДД");



saveStaff += strFilterDTP1 + "00:00:00' и '" + strFilterDTP2 + "23:59:59' ";

}

0x01AA

Да, я понимаю.
Но это не должно помешать вам принять мой ответ ;)

Goran Bibic

Принято

0x01AA

Спасибо

Goran Bibic

Вы хотите помочь мне решить код rest

Как разрешить отдых вне кода

если (checkBox1.Проверено)
{
Строка strFilterDTP1 = dateTimePicker1.Value.ToString("гггг-ММ-ДД");
Строка strFilterDTP2 = dateTimePicker2.Value.ToString("гггг-ММ-ДД");



saveStaff += strFilterDTP1 + "00:00:00' и '" + strFilterDTP2 + "23:59:59' ";

}

Goran Bibic

Как разрешить отдых вне кода

если (checkBox1.Проверено)
{
Строка strFilterDTP1 = dateTimePicker1.Value.ToString("гггг-ММ-ДД");
Строка strFilterDTP2 = dateTimePicker2.Value.ToString("гггг-ММ-ДД");



saveStaff += strFilterDTP1 + "00:00:00' и '" + strFilterDTP2 + "23:59:59' ";

}

0x01AA

Это действительно грязное решение, но в любом случае:
Псевдокод:

String saveStaff= "SELECT x FROM y @where GROUP BY";
String where= string.Empty;
if (!string.IsNullOrEmpty(textBox1.Text))
{
where= " WHERE roba LIKE '%" + textBox1.Text + "%' ";
}
if (checkBox1.Checked)
{
if (where == string.Empty)
where= " WHERE ";
else

where+= " AND ";
where+= strFilterDTP1 + " 00:00:00' AND '" + strFilterDTP2 + " 23:59:59' ";

}
saveStaff= saveStaff.Replace("@where", where);

0x01AA

Sorrz, может-Т отформатировать выше хороший комментарий :(

0x01AA

Помогло ли это?

Goran Bibic

Yes...it помогите...но я кое-что забыл...
В строке saveStaff= "SELECT x FROM y @where GROUP BY";

У меня нет свидания, Инд не работает...Я должен вставить дату столбца в запрос

:-) Но я думаю, что это работает,,, нет ошибок

0x01AA

Я действительно предлагаю перейти к параметризованным запросам. На первый взгляд это может показаться сложным, но как только вы один раз успешно им воспользуетесь, вы увидите все преимущества ;)