Npgsql AddWithValue 不起作用
本文关键字:不起作用 AddWithValue Npgsql | 更新日期: 2023-09-27 18:30:44
我有以下一段代码
cmd.CommandText = "SELECT * FROM product WHERE name LIKE '%@pattern%' OR description LIKE '%@pattern%' OR category LIKE '%@pattern%';";
cmd.Parameters.AddWithValue("pattern", pattern);
这会在我的代码中返回一个空的结果集。
但是如果我像这样在 PgAdmin 中输入查询
SELECT *
FROM product
WHERE name LIKE '%otter%'
OR description LIKE '%otter%'
OR category LIKE '%otter%';
我做错了什么?
搜索%@pattern%
字符串文字。使用字符串压缩:
cmd.CommandText = "SELECT * FROM product WHERE name LIKE '%' || @pattern || '%' OR description LIKE '%' || @pattern ||'%' OR category LIKE '%' || @pattern ||'%';";
cmd.Parameters.AddWithValue("pattern", pattern);
无论如何,以通配符开头的表达式不可 SARGable,因此性能不佳。考虑使用 FULL TEXT INDEX
.
当您将查询编写为:
cmd.CommandText = "SELECT * FROM product WHERE name LIKE '%@pattern%' OR description LIKE '%@pattern%' OR category LIKE '%@pattern%';";
您希望@patern
将替换为第二行的值。但事实并非如此。它真正做的是搜索字符串文字%@pattern%
当然你在表中没有。这就是你得到空结果集的原因。
使用字符串串联时,会将通配符(开始/结束)添加到参数的实际值中。