繁体   English   中英

如何获取我的C#和MySql从数据库返回多个条目?

[英]How can I get my C# and MySql to return more than one entry from the database?

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

如果我搜索“ 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.");
                }
            }

您可能想要使用while循环,例如:

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();
            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"));
                }
            if(movieBox.Items.Count() == 0)
                {
                MessageBox.Show("Sorry, but that title is unavailable.");
                }
            }

这未经测试,但可能非常接近您的需求。

使用while循环而不是if。
如果还有更多记录可供读取器读取,则Reader.Read将返回true。

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

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.");
    }
}

您需要while循环,而不是if 另外,我看到您有一个movieBox变量,该变量具有一个Items字段,您可以在其中添加结果的列。 但是,您需要在方法中返回更多的记录实例,因此需要在while循环的每次迭代中创建一个movieBox ,但要将其添加到movieBoxes变量中,该变量表示movieBox元素的Collection ,并返回movieBoxes而不是movieBoxwhile循环之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM