我在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就行了。因此,我在考虑它与''引用?
答案 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。