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);