c# - '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
等的记录。
我应该在代码方面做些什么来修复我的输出,我是否正确地使用了我的参数?
解决方案
这里的问题是参数替换。尝试将值视为字符串常量:
WHERE firstName LIKE '%' + @name + '%'
注意:没有单引号。
或者,或者,将通配符放入应用程序中:
WHERE firstName LIKE @name
推荐阅读
- postgresql - 将新表添加到发布后,PostgreSQL 逻辑复制不起作用
- c++ - 我的编译器没有找到凉亭库
- php - 尝试使用表单创建 $_POST 函数,并且由于表格内部不允许使用表单而无法传递正确的值
- cloud-foundry - 我们可以在 Pivotal Cloud Foundry 的不同空间中使用相同的主机名和域吗?
- python - 尝试导入我在 PyPi 上上传的包时出现模块错误
- node.js - 无法创建或编辑新帖子(Node 和 Mongo)
- go - 进程中断:信号:杀死
- python - ActiveMQ:单个生产者,多个消费者
- google-apps-script - 谷歌表格脚本查找公式并将它们复制/粘贴到笔记中
- python - 将负载均衡函数转换为生成器