将访问数据库的内容放入两个列表框

时间:2015-09-01 16:59:01

标签: c# database

您好我有一个包含两个表的数据库:1。)国家(表名:2。)网站 每个国家/地区都有一个或多个网站

我正在尝试创建一个C#WindowsForm应用程序,我希望用户首先从第一个listbox1中选择一个国家/地区,然后所有网站将基于数据库在第二个listbox2中...我无论如何都无法显示使用select语句在第一个文本框中的所有国家/地区:代码如下

try
{ 
    connection.Open();
    OleDbCommand command = new OleDbCommand();
    command.Connection = connection;
    command.CommandText = "SELECT CountryName FROM Countries ";
    //whenever you want to get some data from the database
    using (OleDbDataReader reader = command.ExecuteReader())
    {
        listBox.Items.Add(reader);
    }
    //OleDbDataReader reader   = command.ExecuteReader();
    connection.Close();
}
catch(Exception l)
{
    MessageBox.Show("Error:" + l);
}

此代码不会显示列表框中的项目。

有人可以提出建议吗?

2 个答案:

答案 0 :(得分:0)

您可能希望从阅读器获取数据并将其转换为对象,然后再将其放入列表框中。您可以按reader["columnname"]获取每列的值。不要忘记您还需要将每个值转换为正确的类型,您可能会在System.Convert中找到所需的所有类型的转换。

考虑到您的情景,您应该可以

using (OleDbDataReader reader = command.ExecuteReader())
{
    while(reader.Read())
    {
        listBox.Items.Add(reader["CountryName"].ToString());
    }
}

答案 1 :(得分:0)

您正在尝试将OleDbDataReader添加为列表框项而不是使用它来读取数据,以下是如何使用它的示例:

try
{
    connection.Open();
    using (OleDbCommand command = new OleDbCommand())
    {
        command.Connection = connection;
        command.CommandText = "SELECT CountryName FROM Countries ";
        //whenever you want to get some data from the database
        using (OleDbDataReader reader = command.ExecuteReader())
        {
            while (reader.NextResult())
            {
                listBox.Items.Add(reader.GetString(0));
            }
        }
    }
}
catch (Exception l)
{
    MessageBox.Show("Error:" + l);
}
finally
{
    connection.Close();
}