这是我的代码的摘录。一切都按照预期的方式运行,但是我正在尝试添加一项功能,该功能使程序可以从数据库返回多于一行的内容,也就是说,可以返回多个结果。

如果我搜索“ silver”,我会得到Silverado。如果我搜索“ silver l”,则会获得Silver Linings Playbook。

我一直试图做的是搜索“ silver”并获得Silverado和Silver Linings Playbook,但是我的循环并没有解决问题,有些帮助将对您有所帮助。

            movieBox.Items.Clear();
            try
            {
            db_connection.Open();
            sql_command = new MySqlCommand("select * from mov_db.movies where title like '%" + searchBox.Text + "%'", db_connection);
            sql_reader = sql_command.ExecuteReader();
            if (sql_reader.Read())
                {
                movieBox.Items.Add(sql_reader.GetString("title"));
                movieBox.Items.Add(sql_reader.GetString("year"));
                movieBox.Items.Add(sql_reader.GetString("genre"));
                movieBox.Items.Add(sql_reader.GetString("rating"));
                }
            else
                {
                MessageBox.Show("Sorry, but that title is unavailable.");
                }
            }

最佳答案

问题在于您没有遍历阅读器返回的所有行,而只是阅读了第一行。解决方法如下:

movieBox.Items.Clear();
try
{
    db_connection.Open();
    sql_command = new MySqlCommand("select * from mov_db.movies where title like '%" + searchBox.Text + "%'", db_connection);
    sql_reader = sql_command.ExecuteReader();
    if(sql_reader.HasRows)
        while(sql_reader.Read())
        {
            movieBox.Items.Add(sql_reader.GetString("title"));
            movieBox.Items.Add(sql_reader.GetString("year"));
            movieBox.Items.Add(sql_reader.GetString("genre"));
            movieBox.Items.Add(sql_reader.GetString("rating"));
        }
    }
    else
    {
        MessageBox.Show("Sorry, but that title is unavailable.");
    }
}

10-05 23:21