查询无法使用LIKE运行

时间:2012-10-30 18:32:19

标签: c# sql sqlcommand sql-like

我正在使用C#通过SqlCommand运行查询。查询的一个按预期执行,但当我复杂化时,我得到的奇怪结果似乎没有意义。我希望有人能让这个社区比我现在更了解它。

以下代码运行正常,找到包含所提供文本的标题的任何记录。

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%' + @title + '%'";
comm.Parameters.AddWithValue("id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]);

但是,当我添加以下部分时,返回的唯一结果是与id匹配的结果。排除部分匹配标题的结果。为什么会这样?

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%' + @title + '%' OR Id=@id";
comm.Parameters.AddWithValue("id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]);

3 个答案:

答案 0 :(得分:1)

尝试将通配符放在参数的值中,而不是在查询中使用它们:

comm.CommandText = "SELECT * FROM tbl_records WHERE (Title LIKE @title) OR (Id=@id)";
comm.Parameters.AddWithValue("@id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("@title", "%" + Request.QueryString["idortitle"] + "%");

答案 1 :(得分:0)

尝试使用这段代码:

comm.CommandText = "SELECT * FROM tbl_records WHERE Title LIKE '%@title%' OR Id = @id";
comm.Parameters.AddWithValue("@id", Request.QueryString["idortitle"]);
comm.Parameters.AddWithValue("@title", Request.QueryString["idortitle"]);

答案 2 :(得分:0)

基于的参数是非数字的,并且由于id字段为数字而导致查询错误而不会引发错误。添加检查以确保仅使用数字响应来检查ID字段时,代码可以正常工作。见下面的代码:

int x;

            comm.CommandText = "SELECT * FROM tbl_requests WHERE Title LIKE '%' + @title + '%'";
            comm.Parameters.AddWithValue("title", Request.QueryString["idortitle"]);
            if(int.TryParse(Request.QueryString["idortitle"],out x)){
                comm.CommandText += " OR RequestId=@id";
                comm.Parameters.AddWithValue("id", x);
            }