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)。
我有如下一段代码
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)。