您好我有一个包含两个表的数据库: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);
}
此代码不会显示列表框中的项目。
有人可以提出建议吗?
答案 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();
}