我是编程新手,并且一直在互联网上寻找如何解决我的问题,但遗憾的是没有成功。有人可以帮帮我吗?
所以我有一个包含不同表的访问数据库,我希望所有表都出现在一个组合框中,例如: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();
}
答案 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