C# Npgsql AddWithValue不工作?

C# Npgsql AddWithValue不工作?,c#,postgresql,npgsql,C#,Postgresql,Npgsql,我有下面的代码 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 pr

我有下面的代码

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);
无论如何,以通配符开头的表达式不是这样的,所以它的性能很差。考虑使用<代码>全文索引< /代码> .<
当您将查询编写为:

cmd.CommandText = "SELECT * FROM product WHERE name LIKE '%@pattern%' OR description LIKE '%@pattern%' OR category LIKE '%@pattern%';"; 
您希望
@paten
将替换为第二行的值。但事实并非如此。它真正做的是搜索字符串文字
%@pattern%
,表中当然没有。这就是为什么您会得到空的resultset


使用字符串连接时,将向参数的实际值添加通配符(开始/结束)

就这样!不过,我只能在15分钟后接受你的回答。:/你能解释一下我为什么要扭弦吗?事后看来是有道理的。非常感谢。