У меня есть окно поиска, которое выполняет поиск по идентификатору клиента, его полному имени или части его имени. Я использую «НРАВИТСЯ» для поиска по части их имени.
Я могу искать по идентификатору клиента или полному имени без проблем, но если я введу 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 и т. д.
Есть ли что-то, что я должен сделать с кодом, чтобы исправить мой вывод, правильно ли я использую свои параметры?





Проблема здесь заключается в подстановке параметров. Попробуйте обработать значение как строковую константу:
WHERE firstName LIKE '%' + @name + '%'
Примечание: без одинарных кавычек.
Или, как вариант, поставьте подстановочные знаки в приложении:
WHERE firstName LIKE @name
Спасибо, я так и думал, что это простое решение!