SQL参数化查询未显示结果
本文关键字:显示 结果 查询 参数 SQL | 更新日期: 2024-10-23 10:48:02
我的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编写此内容???
您应该使用
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);