Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简化非参数化mysql查询_C#_Mysql_Asp.net - Fatal编程技术网

C# 简化非参数化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

我对下面的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 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解决了我的问题,谢谢。