首页 > 解决方案 > 'LIKE' 在代码中的 SQL 语句中不起作用,但在 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等的记录。

我应该在代码方面做些什么来修复我的输出,我是否正确地使用了我的参数?

标签: c#sqlsql-serversql-like

解决方案


这里的问题是参数替换。尝试将值视为字符串常量:

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

注意:没有单引号。

或者,或者,将通配符放入应用程序中:

WHERE firstName LIKE @name

推荐阅读