无法使用 ODBC 连接从 .Net Core 3.0 访问

Posted

技术标签:

【中文标题】无法使用 ODBC 连接从 .Net Core 3.0 访问【英文标题】:Can't use ODBC connection to Access from .Net Core 3.0 【发布时间】:2020-06-06 23:39:03 【问题描述】:

我正在尝试连接到 Access .accdb 文件并从我在 VS 2019 (.Net Core 3.0) 中的 c# 项目中读取数据。我使用的是 64 位系统,并且我相信我已经安装了用于 Access 的 32 位和 64 位 odbc 驱动程序。

我能够在使用“MS Access 数据库”数据源名称的服务器资源管理器中设置数据连接。当我测试连接时,它工作正常。另外,我可以在服务器资源管理器中扩展新连接,我可以很好地看到所有表。我右击数据连接选择修改,可以看到数据源名称为MS Access Database,如果选择“使用连接字符串”,则完整的连接字符串为

Dsn=MS Access Database;dbq=C:\Brandeis\BNCConejo_Data.accdb;defaultdir=C:\Brandeis;driverid=25;fil=MS Access;maxbuffersize=2048;pagetimeout=5;uid=admin.

如前所述,当我在修改连接对话框中使用 dsn 或完整连接字符串时,单击“测试连接”按钮会给我一条成功消息。如果我在代码中使用 DSN 或完整连接字符串,则会收到此错误:

ERROR [IM014] [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application

这是我的代码的 sn-p:

using (var conn = new OdbcConnection(connectionString))

   try
   
      conn.Open();
   
   catch (OdbcException ex)
   
       LastError = "ODBC Error: " + ex.Message;
       return null;
   


我尝试过针对任何 CPU、x64 和 x86,但它们都不起作用。都返回上述异常信息。

知道为什么使用相同的连接字符串,服务器资源管理器数据连接有效,但 c# 代码无效?

顺便说一句,早些时候出了点问题,我似乎缺少我的 odbc 驱动程序。我下载并运行了 AccessDatabaseEngine.exe 和 AccessDatabaseEngine_X64.exe,它们都带有 /quiet 选项,因此它们可以正确安装。这给我留下了可用的 odbc 驱动程序,但我仍然得到上述异常。

更新:尝试使用 mysql 的已知良好 DSN 条目打开与 MySQL 数据库的连接时会发生相同的错误。在生产 Access 应用程序中使用此 DSN 时,它可以正常工作。

谢谢...

【问题讨论】:

【参考方案1】:

最终通过完全卸载我的32位Office并安装64位Office解决了这个问题。

【讨论】:

以上是关于无法使用 ODBC 连接从 .Net Core 3.0 访问的主要内容,如果未能解决你的问题,请参考以下文章

AWS RedShift - .NET Core(ODBC 支持?)

C# .NET Core 3.1 无法建立 SSL 连接

从代码更改/创建 ODBC 连接

通过 ODBC 从 C# 读取 Netezza 数据库表在 Windows 7 中不起作用

无法在 .NET Core 中使用 WCF WebHttpBinding

尝试使用 .Net Core 3.1 连接 mySAP WCF 时出现问题