如何将访问数据库中的所有表加载到组合框中

时间:2016-03-21 09:33:23

标签: c# combobox

我是编程新手,并且一直在互联网上寻找如何解决我的问题,但遗憾的是没有成功。有人可以帮帮我吗?

所以我有一个包含不同表的访问数据库,我希望所有表都出现在一个组合框中,例如:tblFood,tblCars,tblAnimals ......

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\School\Stage\Program testen\Program\bin\Debug\InventoryDB.accdb");

private void Form1_Load(object sender, EventArgs e)
{
    con.Open();
    OleDbCommand command = new OleDbCommand();
    command.Connection = con;
    string query = "Select * from ALL THE TABELS IN ACCESS";
    command.CommandText = query;

    OleDbDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        comboBoxTabel.Items.Add(reader["ADD THE TABLES TO COMBOBOX"].ToString());
    }
    con.Close();
}

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用OleDbConnection.GetSchema方法

using(OleDbConnection cnn = new OleDbConnection("......"))
{
    cnn.Open();
    DataTable dt = cnn.GetSchema("TABLES");
    foreach(DataRow r in dt.Rows)
        Console.WriteLine(r["TABLE_NAME"].ToString());
}

请记住,这会产生很多噪音。我的意思是你会在GetSchema返回的DataTable中找到系统对象和视图。您可以使用描述对象类型的TABLE_TYPE列过滤掉它们 例如,您可以使用类似

的语法来获取用户表
DataTable dt = cnn.GetSchema("TABLES")
                  .AsEnumerable()
                  .Where(x => 
                   x.Field<string>("TABLE_TYPE") == "TABLE")
                  .CopyToDataTable();

过滤输出的另一种方法是使用接受名为overload of GetSchema的字符串数组的Schema Restrictions