【问题标题】:C# SQLite Parameterized Select Using LIKEC# SQLite 参数化选择使用 LIKE
【发布时间】:2011-05-18 19:32:48
【问题描述】:

我正在尝试执行 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");

这不会返回任何结果。

【问题讨论】:

    标签: c# sqlite system.data.sqlite


    【解决方案1】:

    最简单的方法是使用'||'

    使用:

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

    代替:

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

    我已经回复here

    【讨论】:

    • 谢谢!我正在寻找一种方法来锻炼,必须将“%”字符放入搜索参数值中。我看到@Thunderforge 对接受的答案发表了评论,基本上说的是你在这里所说的,但如果没有先看到你的答案,我不会注意到这一点。
    【解决方案2】:

    你不能那样做。参数必须是完整的值——它不仅仅是对 SQL 的字符串替换。你可以这样做:

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

    【讨论】:

    • string sel = "SELECT * FROM [TABLE] where hostname like '%'+@host+'%'"; 也可以。
    • 谢谢马克 - 这帮助了很多。 Donnie - 我之前尝试过,但它似乎对我不起作用。
    • 刚刚在 Ruby 中使用 Sqlite3 遇到了同样的情况,您的解决方案在那里也很成功。 Upvote,由于某种原因,我的屏幕上出现了一群小马? ://
    • @Donnie,您的声明有效,但我必须使用与 || 连接而不是 +
    • 成功了。凉爽的。 :)
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2012-11-01
    • 2011-11-13
    相关资源
    最近更新 更多