2013-12-18 16 views
3

我在我的DataAcess类中有以下功能,但它没有显示任何结果。
我的代码如下:SQL参数化查询不显示结果

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+"%'"; 

如何与参数使用写@产品名称 ???

回答

7

,您应该使用的

LIKE '%' + @ProductName + '%' 

代替

LIKE '%@ProductName%' 

为什么?因为在查询中,你的参数在引号内。在引号中,SQL会将其识别为string literal从不将其视为参数。

作为替代方案,你可以在你AddParameter方法使用% %一部分 Damien_The_Unbelievermentioned

+0

日Thnx Soner。有用。 :) – Sohail

+0

@Sohail你是相当受欢迎的.. –

3

尝试,而不是:

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

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

+0

Thanx Damien,它也可以,但我喜欢Soner的方式(不知何故):) – Sohail

+0

@Sohail - 是的,在这一点上,它更多的是品味的问题。 –

0

,而不是添加参数,还可以使用:

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

我的要求是参数.. – Sohail

+0

@Sohail - 好的Soner来救你:) –