SqlParameter无法与LIKE Operator ASP.NET一起使用

时间:2020-05-02 08:36:52

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

我有这个查询来从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();

2 个答案:

答案 0 :(得分:0)

我从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();

答案 1 :(得分: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();

因为您需要在参数值中而不是查询中添加“%”。此外,查询字符串中的参数名称也不应用引号引起来。