0

我正在通过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"]);
4

3 回答 3

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"] + "%");
于 2012-10-30T18:40:09.833 回答
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"]);
于 2012-10-30T18:39:48.460 回答
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);
            }
于 2012-10-30T18:49:05.887 回答