【问题标题】:SqlParameter not working with LIKE Operator ASP.NET [duplicate]SqlParameter 不适用于 LIKE Operator ASP.NET [重复]
【发布时间】:2020-08-16 18:33:38
【问题描述】:

我有这个查询来从 SQL Server 数据库中的表中获取几行。但查询总是返回 0 行。没有错误,但此查询不匹配任何行。

string name = //string data from http request


 var apriori = db.Aprioris.SqlQuery("Select top 5 * from Apriori where Antecedent LIKE '%@name%' ", new SqlParameter("@name", name)).ToList();

我尝试使用= 代替LIKE,然后它起作用了,但在本次比赛中我应该使用LIKE 关键字,因为我需要部分匹配。

我也试过这个

string name = "\'"+"%"+prod.Name+"%"+"\'";//'%stringval%'
var apriori = db.Aprioris.SqlQuery("Select top 5 * from Apriori where Antecedent LIKE @name ", new SqlParameter("@name", name)).ToList();

但是没有一个起作用,有人知道为什么不起作用吗?

我的表格中的数据没有问题,因为这个工作完美

var apriori = db.Aprioris.SqlQuery("Select top 5 * from Apriori where Antecedent LIKE '%meatballs%' ").ToList();

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework ado.net


    【解决方案1】:

    我从 string to SqlDbType 替换了 name 的数据类型,它起作用了。 这是修改后的代码

                SqlParameter name = new SqlParameter();
                name.ParameterName = "@name";
                name.SqlDbType = System.Data.SqlDbType.VarChar;
                name.Value = "%" + prod.Name + "%";// prod.Name from http request
                var apriori = db.Aprioris.SqlQuery("Select top 5 * from Apriori where Antecedent LIKE @name", name).ToList();
    

    【讨论】:

      【解决方案2】:

      可能你想做的就是这样:

      string name = //string data from http request
      
      
       var apriori = db.Aprioris.SqlQuery("Select top 5 * from Apriori where Antecedent LIKE @name ", new SqlParameter("@name", "%" + name + "%")).ToList();
      

      由于您需要在参数的值中添加“%”,而不是在查询中。并且查询字符串中的参数名称也不应该用引号引起来。

      【讨论】:

        猜你喜欢
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        相关资源
        最近更新 更多