我有这个查询从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();
我替换了数据类型 名称 从 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();
可能你要做的就是这样。
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();
因为你需要在参数的值里加上"%",而不是在查询里。而且查询字符串中的参数名称也不应该用引号包围。