我是编程的新手,已经在互联网上寻找解决问题的方法已经有一段时间了,但可惜没有成功。你们中的一些可以帮我吗?

所以我有一个具有不同表的访问数据库,并且我希望所有表都出现在组合框中,例如: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();
}

最佳答案

最简单的方法是使用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的字符串数组

09-25 18:30