C# 简化非参数化mysql查询
我对下面的mySql查询有一个问题C# 简化非参数化mysql查询,c#,mysql,asp.net,C#,Mysql,Asp.net,我对下面的mySql查询有一个问题 SELECT name, hospitalID, currentAvgRating, rank FROM ( SELECT name,hospitalID,currentAvgRating,city, @curRank := @curRank + 1 AS rank FROM hospitals h, ( SELECT @curRank := 0) r ORDER BY currentAvgRati
SELECT name, hospitalID, currentAvgRating, rank
FROM ( SELECT name,hospitalID,currentAvgRating,city,
@curRank := @curRank + 1 AS rank
FROM hospitals h, ( SELECT @curRank := 0) r
ORDER BY currentAvgRating DESC
) toplist
WHERE toplist.hospitalID = @hospitalID
and city = @city
我使用这个查询来查找特定项目的排名&它工作正常。但在程序中运行时,我得到了致命错误,必须定义参数'@curRank'。但这是mysql语法,那么我如何获得它的参数呢
更新
string str = "SELECT name, hospitalID, currentAvgRating, rank FROM (SELECT name,hospitalID,currentAvgRating,city,@curRank := @curRank + 1 AS rank FROM hospitals h, (SELECT @curRank := 0) r ORDER BY currentAvgRating DESC) toplist WHERE toplist.hospitalID = @hospitalID and city = @city";
con.Open();
MySqlCommand cmd = new MySqlCommand(str, con);
cmd.Parameters.AddWithValue("@hospitalID", generalID.Text);
cmd.Parameters.AddWithValue("@city", cityName.Text);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
您可以在没有排名的情况下获得特定医院/城市对的排名。以下是您的查询的近似值:
select count(*) + 1 as ranking
from hospitals h cross join
(select h.currentAvgRating
from hospitals h
where h.hospitalID = @hospitalID and h.city = @city
) hh
where h.currentAvgRating > hh.currentAvgRating;
与您的代码不同,这将为所有具有相同评级、相同排名的医院提供服务
如果您不想更改代码,请参阅此。事实上,我会引用相关部分:
我必须补充一点
;Allow User Variables=True
连接到连接字符串
您的SQL是正确的,我认为C#命令参数和mySQL参数存在冲突 尝试这样修改SQL代码
SELECT name, hospitalID, currentAvgRating, rank
FROM ( SELECT name,hospitalID,currentAvgRating,city,
@curRank := @curRank + 1 AS rank
FROM hospitals h, ( SELECT @curRank := 0) r
ORDER BY currentAvgRating DESC
) toplist
WHERE toplist.hospitalID = ?hospitalID
and city = ?city
string str = <Example Above>;
con.Open();
MySqlCommand cmd = new MySqlCommand(str, con);
cmd.Parameters.AddWithValue("?hospitalID", generalID.Text);
cmd.Parameters.AddWithValue("?city", cityName.Text);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
你喜欢这样吗
SELECT name, hospitalID, currentAvgRating, rank
FROM ( SELECT name,hospitalID,currentAvgRating,city,
@curRank := @curRank + 1 AS rank
FROM hospitals h, ( SELECT @curRank := 0) r
ORDER BY currentAvgRating DESC
) toplist
WHERE toplist.hospitalID = ?hospitalID
and city = ?city
string str = <Example Above>;
con.Open();
MySqlCommand cmd = new MySqlCommand(str, con);
cmd.Parameters.AddWithValue("?hospitalID", generalID.Text);
cmd.Parameters.AddWithValue("?city", cityName.Text);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
con.Close();
stringstr=;
con.Open();
MySqlCommand cmd=新的MySqlCommand(str,con);
cmd.Parameters.AddWithValue(“?hospitalID”,generalID.Text);
cmd.Parameters.AddWithValue(“?city”,cityName.Text);
MySqlDataAdapter da=新的MySqlDataAdapter(cmd);
DataTable dt=新的DataTable();
da.填充(dt);
con.Close();
只是使用更改C#命令参数?而不是使用@为什么不显示调用此查询的C#代码?谢谢。但是我的sql查询按照我的要求正常工作。无论如何,添加Allow User Variables=True解决了我的问题,谢谢。