Scribling Doodle Ответов: 2

Как отфильтровать данные из одной таблицы, используя в качестве фильтров 3 comboboxes?


Здравствуйте, у меня есть эти 3 comboboxes tht мне нужно отфильтровать мой запрос, чтобы он показывал только данные о 3 combobox вместе взятых.

Возьмем к примеру вот это:

Идентификатор | мотив | наблюдение авиабилет цена | ($) | гражданского паспорта | срока |
1 / превышение скорости| автомобиль ехал со скоростью 200 миль в час, когда дорога говорит 90 миль в час| 350$ | 15441151 | 4 мая 2018|

А теперь представьте, что я хочу отфильтровать "мотив" (превышение скорости) и "гражданское удостоверение личности" (15441151) и дату сдачи (4 мая 2018 года)?

Как это возможно?
Я получаю эту ошибку каждый раз, когда использую более 1 фильтра:
Цитата:
Преобразование строки "SELECT * FROM dv_principal where" в тип "Double" недопустимо. '


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

SELECT * FROM dv_principal where MOTIVE='" + cmbMotive.SelectedValue + "' AND CIV_ID='" + cmbCliente.SelectedValue + " AND DUE_DATE= '"+ dtpDueDate.SelectedText+"'"

2 Ответов

Рейтинг:
2

Scribling Doodle

Основываясь на ответе @F-ES Sitecore, я нашел проблему, связанную с двойными значениями.

Во-первых, при использовании чисел рекомендуется использовать символ "&" вместо символов"+". Потому что мы говорим о числах и для самих запросов нам нужно определить, какой это тип даты. Исправлена проблема, заменив все " + "на" &", сделав запрос таким.

SELECT * FROM dv_principal where MOTIVE='" & cmbMotive.SelectedValue & "' AND CIV_ID=" & cmbCliente.SelectedValue & " AND DUE_DATE= '"+ dtpDueDate.SelectedText +"'"


Richard Deeming

Ничего из этого не было бы проблемой, если бы вы начали с правильно параметризованного запроса.

Scribling Doodle

Это следующий шаг, как я уже сказал в комментариях. Я всегда начинаю так, чтобы представить себе свою базу данных во время чтения кода. Вместо того, чтобы читать тонны AddwitValues под ним... Это проще читать и более уязвимо. Сейчас я создам параметризованный запрос, так как сейчас все идет отлично.

Рейтинг:
14

F-ES Sitecore

Вы начинаете одну цитату, но не закрываете ее

SELECT * FROM dv_principal where MOTIVE='" + cmbMotive.SelectedValue + "' AND CIV_ID='" + cmbCliente.SelectedValue + " AND DUE_DATE= '"+ dtpDueDate.SelectedText+"'"


Выполните некоторую базовую отладку и посмотрите на строку, которую вы создаете

SELECT * FROM dv_principal where MOTIVE='Speeding' AND CIV_ID='15441151 AND DUE_DATE= '4th May 2018'


Видите ошибку? Если значение числовое вам вообще не нужны кавычки

SELECT * FROM dv_principal where MOTIVE='" + cmbMotive.SelectedValue + "' AND CIV_ID=" + cmbCliente.SelectedValue + " AND DUE_DATE= '"+ dtpDueDate.SelectedText+"'"


Вы также должны использовать параметризованные запросы, поскольку ваш код открыт для атак SQL-инъекций, и, учитывая явно чувствительный характер данных, вам необходимо обеспечить их защиту.

PS обратите внимание, что если ваш ответ на это "все еще не работает", который не дает никому достаточно информации, чтобы помочь вам, ваша обработка дат выглядит подозрительно, так что это будет следующая вещь, на которую я бы посмотрел.


Scribling Doodle

Я делаю это каждый раз, потому что мне легче понять запрос... После этого я начинаю создавать параметризованные запросы с помощью cmd.AddWithValue ("@1", cmbMotive.SelectedValue). Я постараюсь следовать вашим шагам и вернуться к вам с результатом. Заранее спасибо!

Scribling Doodle

Все та же ошибка относительно двойного значения. Оба комбобокса предназначены для того, чтобы дать мне один номер. На самом деле у меня есть таблица под названием мотив, которая имеет идентификатор для каждого мотива.