«LIKE» не работает в выражении SQL в коде, но находится в SSMS - PullRequest
0 голосов
/ 02 июля 2019

У меня есть окно поиска, в котором выполняется поиск по идентификатору клиента, его полному имени или части имени.Я использую «LIKE» для поиска по части их имени.

Я могу выполнять поиск по ID клиента или полному имени без проблем, но если я введу Sam, записи для Samuel не появятся.

Я делаю это ниже в своем выражении SQL в коде, но не получаю записей при поиске частей имен.

string sql = "SELECT * FROM  customers WHERE firstName LIKE '%@name%' OR lastName LIKE '%@name%' OR (firstName + ' ' + lastName)=@name OR customerID=@id ORDER BY customerID desc";
SqlParameter[] spParameter = new SqlParameter[2];
spParameter[0] = new SqlParameter("@id", (int.TryParse(searchTb.Text, out int i) ? i : 0));
spParameter[1] = new SqlParameter("@name", searchTb.Text);

Я поместил этот запрос в SSMS

SELECT * 
FROM customers 
WHERE firstName LIKE '%Sam%' 
   OR lastName LIKE '%lap%' 
   OR (firstName + ' ' + lastName) = 'Bob Tom' 
   OR customerID = 1

Когда я нажимаю «выполнить», он показывает ожидаемый результат.Я получаю все записи с именами, которые содержат sam, фамилии с lap и т. Д.

Есть ли что-то, что я должен делать с кодом, чтобы исправить свой вывод, правильно ли я использую свои параметры с подобным

1 Ответ

9 голосов
/ 02 июля 2019

Проблема здесь в замене параметров.Попробуйте трактовать значение как строковую константу:

WHERE firstName LIKE '%' + @name + '%'

Примечание: без одинарных кавычек.

Или, альтернативно, вставьте символы подстановки в приложение:

WHERE firstName LIKE @name
...