gpt4 book ai didi

c# - Npgsql AddWithValue 不工作?

转载 作者:行者123 更新时间:2023-11-29 12:04:25 26 4
gpt4 key购买 nike

我有如下一段代码

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);

反正以通配符开头的表达式不是SARGable所以它的性能会很差。考虑使用 FULL TEXT INDEX


当您将查询编写为:

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

您希望 @patern 将在第二行替换为您的值。但事实并非如此。它真正做的是搜索 string literal %@pattern% 当然你没有在表中。这就是您得到空结果集的原因。

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

关于c# - Npgsql AddWithValue 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34852014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com