我是编程的新手,已经在互联网上寻找解决问题的方法已经有一段时间了,但可惜没有成功。你们中的一些可以帮我吗?
所以我有一个具有不同表的访问数据库,并且我希望所有表都出现在组合框中,例如: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的字符串数组