Npgsql AddWithValue 不工作?

Npgsql AddWithValue not working?

我有如下一段代码

cmd.CommandText = "SELECT * FROM product WHERE name LIKE '%@pattern%' OR description LIKE '%@pattern%' OR category LIKE '%@pattern%';";
cmd.Parameters.AddWithValue("pattern", pattern);

这 returns 我的代码中的一个空结果集。

但是如果我像这样在 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%,当然 table 中没有。这就是你得到空结果集的原因。

当您使用字符串连接时,您将向参数的实际值添加通配符 (start/end)。