SqlParameter不能与LIKE操作符一起使用ASP.NET [重复] 。

问题描述 投票:0回答:1

我有这个查询从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个回答
0
投票

我替换了数据类型 名称string to SqlDbType 然后就成功了。这是修改后的代码

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

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

因为你需要在参数的值里加上"%",而不是在查询里。而且查询字符串中的参数名称也不应该用引号包围。

© www.soinside.com 2019 - 2024. All rights reserved.