2013-12-18 29 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來救你:) –