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%';

我做错了什么?

Npgsql AddWithValue 不起作用

搜索%@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%当然你在表中没有。这就是你得到空结果集的原因。

使用字符串串联时,会将通配符(开始/结束)添加到参数的实际值中。