无法使用 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 支持?)
通过 ODBC 从 C# 读取 Netezza 数据库表在 Windows 7 中不起作用