SQL参数化查询未显示结果

时间:2013-12-18 07:36:48

标签: c# asp.net sql

我在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 ???

进行参数化编写

3 个答案:

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