SQL参数化查询未显示结果

我在DataAcess类中有以下函数,但它没有显示任何结果。
我的代码如下:

public List 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参数化编写这个???

你应该用

 LIKE '%' + @ProductName + '%' 

代替

 LIKE '%@ProductName%' 

为什么? 因为在查询中,您的参数在引号内。 在引号中,SQL会将其识别为字符串文字,并且永远不会将其视为参数。

作为替代方案,您可以在您的AddParameter方法中使用% %部分作为Damien_The_Unbeliever 提到的

请尝试:

 db.AddParameter(db.MakeInParam("@ProductName", DbType.String, 30, "%" + productName + "%")); string query = @"SELECT ProductId FROM [Products] WHERE Name LIKE @ProductName"; 

SQL不查找文字字符串中的参数。 因此,您可以将参数设置为LIKE运算符的整个字符串参数。

您也可以使用以下代码而不是添加参数:

 string query = String.Format("Select ProductId FROM Products where Name LIKE '{0}'", productName);