如何将旧的 mdb-database 导入 C# DataTable [重复]

Posted

技术标签:

【中文标题】如何将旧的 mdb-database 导入 C# DataTable [重复]【英文标题】:How to import old mdb-database into C# DataTable [duplicate] 【发布时间】:2021-09-12 20:51:41 【问题描述】:

我有一个非常旧的 mdb 数据库。 我想将数据库中的所有表加载到 C# DataTable 中。 如果可能的话,最终的工具应该是独立的,不需要安装额外的软件。

环境

.NET 5.0 Visual Studio 2019 Windows 10 - 64 位 Office 365 - 32 位

问题:

此代码的外观如何? 我必须添加/安装哪些软件包? 还有其他依赖吗?

【问题讨论】:

Microsoft Access Database Engine 2016 Redistributable -- Access connection strings 您可以从 Access 数据库中提取数据(并且您需要在该计算机上安装 Access 数据引擎才能实现该目标)。但是,在 .net 中,您需要一些存储系统,或者您可以继续使用 access 作为数据库。如果你想放弃Access作为数据库,那么你没有地方存储数据,你至少需要一些数据系统的代码。如果这是独立的桌面,那么您可以使用 sqlLite,因为无需在终端计算机上安装即可使用,但 sqlIite 必须包含在您的项目中。所以数据必须去某个地方转储访问权限 目前我只需要将数据放入 DataTable 并使用此 DataTable。我只需要从表中收集一些数据并将它们放到 json 导出中,但这不是线索。没有安装访问数据引擎就没有访问权限吗? 由于需要生成JSON字符串,所以也可以将数据存储为JSON格式。支持 DataSet 和/或 DataTable:请注意,您需要在 DataTable(s) 的第一行中设置所有值,否则,在反序列化时,数据类型可能/将会被误解(除非您还添加了 JSON Schema)。 不知道任何只是 .dll 的 ODBC 或 oleDB 驱动程序。虽然 sqlLite 是一个简单的 .exe + .dll,但如果您想要驱动程序,那么您仍然必须安装一些 ODBC 驱动程序才能使用它。但是,是的,您需要安装 ACE 数据引擎,如果您需要在计算机上查看 PDF,则同样如此——您需要一个 PDF 查看器。所以是的,您需要在此处安装 ACE 数据引擎,然后还需要 oleDB 或 ODBC 驱动程序。 (安装 ACE 连接包包括 ACE 数据引擎和 ODBC + oleDB 驱动程序。 【参考方案1】:

代码:

string dbLocation = "DatabaseName.mdb";
string tableName = "TableName";
string connString =  $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=dbLocation";

DataTable results = new DataTable();
          
using (OleDbConnection conn = new OleDbConnection(connString))

    OleDbCommand cmd = new OleDbCommand($"SELECT * FROM tableName", conn);
                
    conn.Open();
    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
    adapter.Fill(results);

条件:

为了安装 Office 版本(32/64 位),您必须安装 Microsoft Access Database Engine 2010/2016 Redistributable(对我来说是 2010)。 大多数办公室安装都是 32 位的。

Microsoft Access Database Engine 2010 Redistributable

Microsoft Access Database Engine 2016 Redistributable

如果您选择了正确的版本,尝试在静默模式下安装仍然会出错

accessdatabaseengine.exe /quiet
添加包System.Data.OleDb 应用程序的目标平台必须根据使用的其他包设置为 x86/x64

仍未解决:

实际上,您需要安装 Microsoft Access Database Engine Redistributable。如果还有其他没有这个的方法,请告诉我。

【讨论】:

您不需要安装 Office。数据库引擎与 Office 无关。您需要考虑的是,如果存在 Office 安装并且其 Bitness 与您的应用程序不同,您可能需要安装与您的应用程序 Bitness 匹配的引擎版本。 -- x86和x64版本不能在同一台机器上安装相同的Engine,所以你需要安装另一个Engine的你需要的版本(例如,如果ACE.12已经安装在x86版本并且你的应用需要x64版本,安装ACE.16的x64版本。 或者,根据您发现机器中已安装的 ACE 引擎版本(如果有)替换连接字符串。 @Jimi 谢谢,很高兴知道。比我只需要确保安装了 Redistributable。

以上是关于如何将旧的 mdb-database 导入 C# DataTable [重复]的主要内容,如果未能解决你的问题,请参考以下文章

删除后如何将旧的反应输入存储在R闪亮中

如何将旧的 Wordpress 博客文章 url 重定向到新的

如何使用 Daffodil 将旧的 VC6 项目移动到 VS2010

如何将旧的小部件迁移到新的小部件

将旧 (Django 0.97) 模型数据导入/迁移到 Django 1.8 或更高版本

安卓如何将旧手机所有资料导入新手机