'LIKE' 在代码的 SQL 语句中不起作用,但在 SSMS 中

'LIKE' not working in SQL statement in code, but is in SSMS

我有一个搜索框,可以按客户 ID、他们的全名或部分姓名进行搜索。我正在使用 'LIKE' 使用他们姓名的一部分进行搜索。

我可以通过 customerID 或全名搜索没问题,但如果我输入 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