【问题标题】:How can I get my C# and MySql to return more than one entry from the database?如何让我的 C# 和 MySql 从数据库返回多个条目?
【发布时间】:2015-09-14 12:25:36
【问题描述】:

这是我的代码的摘录。一切都按预期的方式工作,但我正在尝试添加一项功能,该功能允许程序从数据库中返回多行 - 也就是说,不止一个结果。

如果我搜索“银”,我会得到 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 循环而不是 if。

标签: c# mysql sql database search


【解决方案1】:

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

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

【讨论】:

  • 感谢 Nas,成功了!
【解决方案2】:

您可能想使用如下的 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.");
                }
            }

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

【讨论】:

    【解决方案3】:

    使用 while 循环而不是 if。
    Reader.Read 如果有更多记录供读者阅读,则返回 true。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2019-08-17
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多