使用参数化的方式在C#中进行SQLite的SELECT操作并使用LIKE语句

20

我正尝试进行类似以下的SQL查询:

SELECT * FROM [TABLE] WHERE hostname LIKE '%myhostname%';

在普通SQL中这个操作很好用,但是当我在C#中使用System.Data.SQLite时,它只能用于字面量而不是参数,例如

string sel = "SELECT * FROM [TABLE] WHERE hostname LIKE '%@host%'";
...
command.Parameters.AddWithValue("@host", "myhostname");

这里没有返回任何结果。

2个回答

32

你不能这样做。参数必须是完整的值,而不仅仅是将字符串替换为SQL语句。你可以尝试以下方法:

string sel = "SELECT * FROM [TABLE] WHERE hostname LIKE @host";
...
command.Parameters.AddWithValue("@host", "%myhostname%");

5
string sel = "SELECT * FROM [TABLE] where hostname like '%'+@host+'%'"; 这段代码也可以工作。 - Donnie
谢谢马克 - 这对我很有帮助。唐尼 - 我之前尝试过这个,但好像对我没用。 - AdamC
刚在Ruby和Sqlite3中遇到了同样的情况,你的解决方案也像魔术一样奏效。点了个赞,结果屏幕上出现了一排小马? :/ - Chris Allen Lane
5
@Donnie,你的陈述是有效的,但我不得不使用连字符 || 而不是加号 + 进行连接。 - Thunderforge
运行成功了。太棒了。 :) - Naveen Kumar V

17

最简单的方法是使用“||”。

用法:

const string qry = "SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName || '%' ";

改为:

const string qry = "SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName%";

我已经在这里回答过了


1
谢谢!我一直在寻找一种方法来实现它,而不必将“%”字符放入搜索参数值中。我看到@Thunderforge在接受的答案上发表了评论,基本上说了你在这里说的话,但如果没有先看到你的答案,我可能不会注意到那个评论。 - Dan Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接