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

noo*_*lus 9 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);
Run Code Online (Sandbox Code Playgroud)

如果我删除LIKE它的工作原理.因此,我在考虑它与''引用?

Aar*_*ght 30

原始代码使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.
}
Run Code Online (Sandbox Code Playgroud)

%标志必须参数值的一部分,使用绑定参数时,你不需要单引号的.


Ray*_*Ray -15

sql 语句应该如下所示:

String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE '%' + @MYNAME + '%'"; 
Run Code Online (Sandbox Code Playgroud)

我不确定我完全理解您的评论,但您似乎想在查询中使用文本框中的值 - 也许这就是您想要做的:

String sql = " SELECT * FROM Products WHERE ID = @MYID AND Name LIKE '%' + text_box.Text + '%'";
Run Code Online (Sandbox Code Playgroud)

“text_box”将是文本框控件的实际 ID。

  • SQL 字符串连接值是错误的(即使它有效):由于没有查询计划重用而导致性能不佳,SQL 注入风险,正如已经说过的。 (3认同)