Member 13550326 Ответов: 2

Sql запрос основанный на текстовом поиске не работает


Привет Я новичок в программировании и пытаюсь разработать программное обеспечение для своего бизнеса. У меня есть практический опыт кодирования VB6, поэтому я решил использовать VB .net и MySQL в качестве базы данных.

Проблема : таблица "State_mast" имеет только два поля "St_Code" и "Name".
когда я пытаюсь найти что-то сверху St_mast с помощью запроса
"Выберите имя из State_Mast, где Name = '" & TxtState.Текст & "'"
ничего не возвращается, но когда я использую
"Выберите имя из State_Mast, где ST_Code = '" & TxtCode.Текст & "'"
возвращаются все данные, соответствующие запросу. St_Code-это числовое поле, а Name - текстовое

полный код
SqlQuery = "Select Name from State_Mast where Name = '" & TxtState.Текст & "'"
Sqlcommand = New MySqlCommand(SqlQuery, Conn)
Dim Da Как Новый MySqlDataAdapter
Dim Ds Как Новый Набор Данных
Да.Команды Selectcommand = Sqlcommand, Который
Да.Заполнить(ДС, "государство")
Ящик для сообщений.Показать(ДС.Столы("государство").Строк.Рассчитывать)

Я определил переменные и строку подключения в модуле, который я вызвал во время загрузки формы.

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

Я пробовал разные вещи, но безуспешно

Richard MacCutchan

Какой текст вы пытаетесь сопоставить, и какие записи существуют?

2 Ответов

Рейтинг:
17

Dave Kreskowiak

Во-первых, если St_Code-это числовое поле в вашей таблице, вы рассматриваете текст поиска как строку в запросе. Это должно привести к исключению, генерируемому базой данных из-за несоответствия типов данных.

Если этот код был скопирован и вставлен в этот вопрос, то в предложении WHERE есть пробел между одинарной кавычкой (') и текстом, который вы добавляете к строке запроса. Ваш запрос выглядит следующим образом:

Select Name from State_Mast where Name = ' Text'

Это небольшое пространство, вероятно, и есть то, что портит ваш запрос, когда он не возвращает никаких результатов.

Кроме того, для построения запросов используйте параметризованные запросы, а не конкатенацию строк! Гугл для "VB.NET MySQL Parameterized Queries" и "SQL Injection Attack", чтобы выяснить, почему то, что вы делаете, так плохо.

Использование параметризованных запросов также предотвратило бы возникновение этой ошибки вообще.


Member 13550326

Спасибо, Дэйв. Это было пространство, которое вызывало проблемы.

Рейтинг:
1

Prashanth Mundath

В SQL функция like может быть использована для получения строки с определенными совпадающими текстами и использования символов wild car для неизвестных строк(%). Например, запрос будет выглядеть следующим образом.
Выберите имя из State_Mast, где имя похоже на '%text%"