我在DataAcess类中有以下功能,但没有显示任何结果 我的代码如下:
public List<Products> GetProduct(string productName)
{
System.Data.DataSet ds = null;
db = DBWrapper.GetSqlClientWrapper();
db.ClearParameters();
db.AddParameter(db.MakeInParam("@ProductName", DbType.String, 30, productName));
string query = @"SELECT ProductId
FROM [Products]
WHERE Name LIKE '%@ProductName%'";
ds = db.GetDataSet(query);
db.ClearParameters();
// Rest of Code
}
我也尝试过:
string query = @"SELECT ProductId
FROM [Products]
WHERE Name LIKE '%"+"@ProductName"+"%'";
但它运行正常,没有参数化,如:
string query = @"SELECT ProductId
FROM [Products]
WHERE Name LIKE '%"+productName+"%'";
如何使用 @ProductName ???
进行参数化编写答案 0 :(得分:7)
你应该使用
LIKE '%' + @ProductName + '%'
而不是
LIKE '%@ProductName%'
为什么呢?因为在查询中,您的参数在引号内。在引号中,SQL会将其识别为string literal,而从不将其视为参数。
作为替代方案,您可以使用% %
方法中的AddParameter
部分作为
Damien_The_Unbeliever mentioned 。
答案 1 :(得分:3)
请尝试:
db.AddParameter(db.MakeInParam("@ProductName", DbType.String, 30, "%" + productName + "%"));
string query = @"SELECT ProductId
FROM [Products]
WHERE Name LIKE @ProductName";
SQL不查找文字字符串中的参数。因此,您可以将参数设为LIKE
运算符的整个字符串参数。
答案 2 :(得分:0)
您可以使用:
,而不是添加参数string query = String.Format("Select ProductId FROM Products where Name LIKE '{0}'", productName);