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分钟后接受你的回答。:/你能解释一下我为什么要扭弦吗?事后看来是有道理的。非常感谢。