c# - 为什么我无法通过对表执行第二个查询来将第二个结果添加到列表框? SQL

标签 c# mysql sql

我遇到这个错误是因为我想通过对每个整数进行计数来打印出同一电影名称中的所有 5 个不同的评级整数。第一个查询执行得非常完美,但为什么由于出现如下错误而无法使第二个查询正常工作?

错误:{“列‘RatingNum2’不属于表 Table。”}

   private void EachRating_Click(object sender, EventArgs e)
    {
        string filename, connectionInfo;
        SqlConnection db;

        this.listBox1.Items.Clear();

        filename = "netflix.mdf";

        connectionInfo = String.Format(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=
        |DataDirectory|\{0};Integrated Security=True;", filename);

        string moviename = this.textBox1.Text;
        moviename = moviename.Replace("'", "''");

        string five = "5";
        string four = "4";

        db = new SqlConnection(connectionInfo);
        db.Open();

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = db;

        cmd.CommandText = string.Format(
            @"
                SELECT MovieName, RatingNum1 FROM Movies
                INNER JOIN
                (
                SELECT MovieID, Count(Rating) as RatingNum1 FROM Reviews
                WHERE Rating = 5
                GROUP BY MovieID
                )TEMP
                ON TEMP.MovieID = Movies.MovieID
                WHERE MovieName = '{0}';", moviename);

        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapter.Fill(ds);

        DataTable dt = ds.Tables["TABLE"];

        foreach (DataRow row in dt.Rows)
        {
            string msg = string.Format("{0}: {1}",
            five.ToString(),
            row["RatingNum1"].ToString());

            this.listBox1.Items.Add(msg);
        }

        SqlCommand cmd2 = new SqlCommand();
        cmd2.Connection = db;

        cmd2.CommandText = string.Format(
            @"
              SELECT MovieName, RatingNum2 FROM Movies
              INNER JOIN
              (
              SELECT MovieID, Count(Rating) as RatingNum2 FROM Reviews
              WHERE Rating = 4
              GROUP BY MovieID
              )TEMP
              ON TEMP.MovieID = Movies.MovieID
              WHERE MovieName = '{0}'", moviename);

        SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);
        DataSet ds2 = new DataSet();
        adapter.Fill(ds2);

        DataTable dt2 = ds2.Tables["TABLE"];

        foreach (DataRow row2 in dt2.Rows)
        {
            string msg = string.Format("{0}: {1}",
            four.ToString(),
            row2["RatingNum2"].ToString()); //gets the error

            this.listBox1.Items.Add(msg);
        }

最佳答案

您正在使用第一个适配器填充第二个数据集,因此数据表无法找到“RatingNum2”列。

adapter.Fill(ds2);

应该是

adapter2.Fill(ds2);

关于c# - 为什么我无法通过对表执行第二个查询来将第二个结果添加到列表框? SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113930/

相关文章:

c# - Task<T> 异步导致 Xamarin.iPhone (MonoTouch) JIT 错误?

javascript - 编辑/删除 wordpress 站点中的数据表行

java - 让MySQL自动刷新

SQL Server 表关系

mysql - 从未知数量的带有参数的表中选择

c# - 如何在ASP MVC中实现 "user interactive"依赖注入(inject)

c# - 如何在一行中编写以下lambda表达式?

c# - 知道字符串是长字符串还是 Guid 的最佳方法是什么?

php - Mysql 使用 Like 运算符在 json 数组中搜索

mysql - 选择促销价