SQL参数化查询未显示结果。

3

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

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个回答

7

你应该使用

LIKE '%' + @ProductName + '%'

替代

LIKE '%@ProductName%'

为什么?因为在查询中,你的参数被放在引号里。在引号中,SQL会将其识别为字符串文字,而永远不会将其视为参数。

作为替代方案,你可以在AddParameter方法中使用% %部分,就像Damien_The_Unbeliever 提到的那样


3

相反,可以尝试:

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

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


谢谢Damien,这个方法也可以,但我更喜欢Soner的方式,感觉更简单(不知道为什么) :) - Sohail

0

不必添加参数,您也可以使用:

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

@Sohail - 好的,Soner来拯救你了 :) - Ahmed Salman Tahir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接