【问题标题】:SQL parameterized query not showing resultSQL参数化查询不显示结果
【发布时间】:2013-12-18 07:36:48
【问题描述】:

我的 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 参数化来编写这个???

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    你应该使用

    LIKE '%' + @ProductName + '%'
    

    而不是

    LIKE '%@ProductName%'
    

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

    作为替代方案,您可以在 AddParameter 方法中使用 % % 部分作为 Damien_The_Unbeliever mentioned.

    【讨论】:

      【解决方案2】:

      试试吧:

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

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

      【讨论】:

      • Thanx Damien,它也有效,但我喜欢 Soner 的简单方式(不知何故):)
      【解决方案3】:

      除了添加参数,还可以使用:

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

      【讨论】:

      • @Sohail - 好吧,Soner 来救你了 :)
      猜你喜欢
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多