在不知道表名的情况下将 access 数据库文件中的所有数据显示到 datagridview

Posted

技术标签:

【中文标题】在不知道表名的情况下将 access 数据库文件中的所有数据显示到 datagridview【英文标题】:Showing all data in access database file to datagridview without knowing about table names 【发布时间】:2016-02-01 07:53:37 【问题描述】:

实际上,我正在尝试连接我的 winform 数据挖掘应用程序以在应用程序运行时通过打开的对话框访问数据库文件。由于我正在尝试连接到任何未知的数据库文件(mdb/accdb),所以我不知道它的表名。但是要将数据库连接到 datagridview,您必须提供 sql 查询作为命令。我的问题是,有什么方法可以在任何连接的访问​​数据库文件中加载所有数据(记录),而无需指定/知道访问数据库文件的表名。

谢谢

【问题讨论】:

您使用什么数据访问技术? 看起来像重复的***.com/questions/1699897/… 实际上主要问题是在获得此列表后如何在 SELECT * FROM _____ 等 sql 查询中使用这些表;将所有这些表中的数据加载到 datagridview 你应该照你说的做 :) SELECT * FROM tableName 。你可以谷歌如何在 OLEDB 中进行查询,里面有很多例子。 我应该在查询中使用这个表名列表吗? 【参考方案1】:

您可以先获取或列出表名。正如 Hayden 先生在他的博客 http://davidhayden.com/blog/dave/archive/2006/10/01/GetListOfTablesInMicrosoftAccessUsingGetSchema.aspx

中解释的那样
// Microsoft Access provider factory
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

DataTable userTables = null;
using (DbConnection connection = factory.CreateConnection()) 

    // c:\test\test.mdb
    connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test\\test.mdb";
    // We only want user tables, not system tables
    string[] restrictions = new string[4];
    restrictions[3] = "Table";

    connection.Open();

    // Get list of user tables
    userTables = connection.GetSchema("Tables", restrictions);


List<string> tableNames = new List<string>();
for (int i=0; i < userTables.Rows.Count; i++)
tableNames.Add(userTables.Rows[i][2].ToString());

Retrieve List of Tables in MS Access File

【讨论】:

好的,谢谢,但是我如何在 SELECT * FROM _____ 之类的 sql 查询中使用这些表;将所有这些表中的数据加载到 datagridview 表名保存在“tableNames”列表中。您所要做的就是检索它。 for (int i=0; i 不,实际上我想将所有表的数据加载到单个数据网格中 这 2 个或多个表是否具有相似的字段和/或内部字段数?

以上是关于在不知道表名的情况下将 access 数据库文件中的所有数据显示到 datagridview的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将数据输入自动编号列的情况下将数据插入 MS Access 表?

是否可以在不重写的情况下将数据添加到文件中?

如何在不知道编码的情况下将字节写入 Python 3 中的文件?

PowerQuery:组合在“元表”中配置的表

在不知道类型的情况下将程序集从文件加载到自定义 AppDomain

在不知道数据类型的情况下将值绑定到 PreparedStatement