如何让LIKE子句在ADO.NET和SQL Server中工作

时间:2010-04-07 00:37:57

标签: c# sql ado.net

我在ASP.NET中进行了一个非常简单的查询,但在插入LIKE子句后,它停止工作。

示例:

String sql = " SELECT * 
                 FROM Products 
                WHERE ID = @MYID 
                  AND Name LIKE '%@MYNAME%' ";
SqlCommand command = new SqlCommand(sql, cn);


command.Parameters.AddWithValue("@MYID", MYID.Text);

command.Parameters.AddWithValue("@MYNAME", MYNAME.Text);

如果我删除LIKE就行了。因此,我在考虑它与''引用?

6 个答案:

答案 0 :(得分:28)

原始代码使SQL语句的文本与参数的内容混淆。您的代码应该看起来像这样:

string sql = "SELECT * 
              FROM Products 
              WHERE ID = @MyID
              AND Name LIKE @MyName";
using (SqlCommand command = new SqlCommand(sql, cn))
{
    command.Parameters.AddWithValue("@MyID", MyID.Text);
    command.Parameters.AddWithValue("@MyName", "%" + MyName.Text + "%");
    // Etc.
}

%符号必须是参数值的一部分,并且在使用绑定参数时根本不需要单引号。

答案 1 :(得分:1)

请注意,使用带有初始通配符的LIKE几乎总是非常糟糕的主意,因为查询不会使用该列上的任何索引。在这种情况下,您可能可以逃脱,因为看起来ID列上的过滤器会将您限制为一条记录,但通常您需要做的是在名称列上放置一个全文索引并编写查询这样:

... WHERE CONTAINS(name, @MyName)

答案 2 :(得分:0)

或者

 String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE @MYNAME ";

当您设置@MYNAME参数时,请相应地添加“%”字符(%SMITH%)。在处理参数时,我认为您不需要单引号。

答案 3 :(得分:0)

不要认为使用绑定参数就像将它的值插入SQL字符串一样!绑定参数值作为单独的数据发送到数据库,因此它们不能用引号括起来,也不能包含任何可选的SQL代码,表或列名称!

答案 4 :(得分:-1)

传递参数值

时缺少%符号
command.Parameters.AddWithValue("@MYNAME"+"%", MYNAME.Text);

答案 5 :(得分:-13)

sql语句应如下所示:

String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE '%' + @MYNAME + '%'"; 

我不确定我是否完全理解了您的评论,但似乎您希望在查询中使用文本框中的值 - 也许这就是您要尝试的内容:

String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE '%' + text_box.Text + '%'";

“text_box”将是textBox控件的实际ID。