我有这个查询来从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();
答案 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();
因为您需要在参数值中而不是查询中添加“%”。此外,查询字符串中的参数名称也不应用引号引起来。