如何在 .NRY Core 3.0 应用程序中使用 ODBC 连接到 Access .mdb 文件

Posted

技术标签:

【中文标题】如何在 .NRY Core 3.0 应用程序中使用 ODBC 连接到 Access .mdb 文件【英文标题】:How to use an ODBC connection to an Access .mdb file in a .NRY Core 3.0 app 【发布时间】:2019-10-16 14:35:54 【问题描述】:

我有一个带有类库的 .NRY 标准 2.0 项目,我在其中使用 System.DataODBC(作为 Nuget 包安装)连接到 Access mdb 文件。 然后,我编写了一个 .Net Framework 4.7.2 控制台应用程序来测试该库并按预期工作。然后我编写了一个 .Net Core 3.0 控制台应用程序,因为最终将使用该库的应用程序是一个 .Net Core 应用程序。但这不起作用我收到此错误:

ERROR [IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序

但我随后尝试使用“x86”而不是“Any CPU”来编译解决方案 - 这很有效。然后我认为它必须与 32 位 64 位的 ODBC 驱动程序有关?

需要明确的是,我没有使用 ODBC 管理员 (odbcad32.exe) 配置任何 ODBC 驱动程序。我现在可以在 Visual Studio 中单独运行核心控制台应用程序。

但是,当我将 Core Console 应用程序放在另一台机器上(在 VM 中全新安装 Windows 10 专业版)时,它仍然无法工作。

我必须在 VM 机器上做什么/安装才能使其运行?

【问题讨论】:

【参考方案1】:

如果您使用 mdb(较旧的旧版 JET 引擎),那么您可以在任何机器上连接,因为每个 Windows 副本都附带了 JET 数据库的副本。是的,您将不得不强制您的项目为 x32 (x86),因为 JET 数据引擎仅在 x32 版本中可用。

如果您使用 ACE,那么您使用的是较新的 ACE 数据引擎,如果您使用 Access 2007 和更高版本的格式(因此对于 accDB 文件,您必须使用 ACE)。

当然,与任何驱动程序或软件一样,如果您要部署到其他机器,则必须确保安装了 ACE。作为一般规则,您必须(应该)安装访问连接组件。比如这个:

https://www.microsoft.com/en-us/download/details.aspx?id=54920

请记住,上面有两个版本。一个 x64 位版本和一个 x32 位版本。您想继续将您的 .net 项目强制转换为 x32 或 x64,因为您不能随意选择。 因此,您必须将上述安装作为安装程序的一部分,或者只是提供一个副本,或者让用户下载并安装。

消除上述需求的唯一方法是使用 JET,但这对您来说可能不是一个可能的选择,并且您仅限于 mdb 文件,并且不能将 accDB 文件与 JET 一起使用。

【讨论】:

【参考方案2】:

感谢您的快速回答。

但我发现要使用 System.Data.ODBC 运行 .Net 核心应用程序,要为 x86 CPU 编译的应用程序和安装应用程序的服务器需要具有 .Net Core 运行时 32 位版本已安装。

【讨论】:

假设您使用的是 x32 ACE 驱动程序。如果您使用 x64 ACE,那么您当然会安装 x64 位版本的软件。如果您使用 .net 框架,则默认情况下是 .net 框架(我认为在最新版本的 Windows 上默认安装最高版本 4 或 4.5 - 包括服务器)。

以上是关于如何在 .NRY Core 3.0 应用程序中使用 ODBC 连接到 Access .mdb 文件的主要内容,如果未能解决你的问题,请参考以下文章

在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据

如何在 Visual Studio 2019 和 .NET Core 3.0 中使用 ODBC 连接?

在 Razor (chtml) 中渲染动态视图,如何在 asp.net core 3.0 中将 FileProvider 添加到 razor?

在应用服务环境中安装 ASP.NET CORE 3.0 扩展?

如何在 ASP.NET CORE 3.0 中配置路由以使用带有 [FromQuery] 参数的重载 [HttpGet] 方法?

如何在 ASP NET CORE 3.0 中获取当前登录的用户 ID?