这是我的代码的摘录。一切都按照预期的方式运行,但是我正在尝试添加一项功能,该功能使程序可以从数据库返回多于一行的内容,也就是说,可以返回多个结果。
如果我搜索“ 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.");
}
}