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

3

我是一个编程新手,已经在互联网上寻找了相当长的时间来解决我的问题,但很遗憾没有成功。请问有人能帮帮我吗?

我有一个包含不同表格的访问数据库,我想让所有表格出现在一个组合框中,例如: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个回答

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();

另一种过滤输出的方法是使用接受一个字符串数组参数的GetSchema重载,该参数称为模式限制

嘿,感谢您的回答!很抱歉我只编程大约两个月了。我不太确定如何将您的答案编辑到我的代码中,以便它显示在组合框中:/您能否为我完成此操作?因为当我试图自己实现时,似乎总会出错。 - Viktor
谢谢!但现在我在表格中得到了其他东西 https://gyazo.com/4de915170fed4dd4fc2b43b016247c36,是否可能只显示这个?https://gyazo.com/ffeed846f61c723c7a90d5cbb7940ad4 - Viktor
你看到我对回答做的最后一次编辑了吗?那个有“大量噪音”的部分? - Steve
抱歉,我不知怎么错过了它。它似乎帮了很多忙,只是还有一件事情不必要在那里 https://gyazo.com/2d8c17286b8718fae984bcfea39c45b5 顺便说一下,非常感谢你的帮助。 - Viktor
这似乎是与您的数据库进行某些手动交互的副产品。可能通过访问链接,您可以简单地删除该表或使用对表名称的检查来避免将其添加到组合框中。 - Steve
抱歉,我明白了:c我只是对我的问题过于急躁,我猜当编程中的一个问题解决时,另一个问题就会出现:D谢谢你这么多帮助我! - Viktor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接