0 голосов
спросил от в категории VBNET
Пожалуйста, прочитайте комментарии и ответы на эту тему: #How to find between two dates like 01-may-2018 to 25-may-2018? # [#^ #]
Решение №3 содержит информацию о надлежащем способе фильтрации данных через OleDb.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
0 голосов
ответил от
Дата тип данных существует по некоторым причинам, то есть потому, что вы не можете сравнивать дату в человеческой форме. Когда вы сравниваете 2 даты, вы знаете, что сначала сравниваете год, затем месяц и день, потому что у вас есть понимание даты.
У компьютера нет такого понимания, когда дата является строкой, вы указываете серверу SQL, что дата является датой, а не простой строкой.
da = New OleDbDataAdapter(" Select * from VOUCHER WHERE DATE_OF_PAYMENT between '" + DateTimePicker1.Value + "' and '" + DateTimePicker2.Value + "'", con)

Не решение вашего вопроса, а другая проблема. > Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских входов, и это откроет дверь для уязвимости с именем «SQL injection», это опасно для вашей базы данных и подверженности ошибкам.
Одиночная цитата в названии и вашем крах программы. Если пользователь вводит такое имя, как «Брайан О'Коннер», это может привести к краху вашего приложения, это уязвимость в SQL-инъекции, и авария является наименьшей из проблем, вредоносного ввода пользователя и продвигается к командам SQL со всеми учетными данными.
da = New OleDbDataAdapter(" Select * from VOUCHER WHERE DATE_OF_PAYMENT between '" + DateTimePicker1.Value + "' and '" + DateTimePicker2.Value + "'", con)
# [#^ #]
#SQL Injection # [#^ #]
#SQL Injection Attacks by Example # [#^ #]
#PHP: SQL Injection - Manual # [#^ #]
#SQL Injection Prevention Cheat Sheet - OWASP # [#^ #]
1
da = New OleDbDataAdapter(" Select * from VOUCHER WHERE DATE_OF_PAYMENT between '" + DateTimePicker1.Value + "' and '" + DateTimePicker2.Value + "'", con)
# [1#^ #]
0 голосов
ответил от
Попробуйте BETWEEN:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
# [
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
#]

Но не делайте этого так! Никогда не связывайте строки для создания команды SQL. Это дает вам широкое распространение для случайной или преднамеренной атаки SQL Injection, которая может уничтожить всю вашу базу данных. Всегда используйте Параметрированные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает команды вроде:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем завершает строку до SQL, и у вас возникают проблемы. Но это может быть хуже. Если я прихожу и набираю это вместо: «x»; DROP TABLE MyTable; - «Тогда SQL получает совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Какой SQL видит три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно корректный SELECT
DROP TABLE MyTable;
Совершенно корректная команда «удалить таблицу»
--'
И все остальное - комментарий.
Таким образом, он: выбирает любые соответствующие строки, удаляет таблицу из БД и игнорирует что-либо еще.

Таким образом, ВСЕГДА используйте параметризованные запросы! Или будьте готовы регулярно восстанавливать свою БД из резервной копии. Вы делаете резервные копии регулярно, не так ли?

Категории

Добро пожаловать на сайт DraftingCode Q&A (ИТ ответы), где вы можете задавать вопросы и получать ответы от других членов сообщества.

Связанных вопросов не найдено

...