如何修复错误“'microsoft.ace.oledb.12.0' 提供程序未在本地计算机上注册”。在 Visual Studio 2022 中

问题描述 投票:0回答:1

我已经遇到这个错误大约一个月了,我已经尝试了几乎所有可以在网上找到的解决方案,但仍然没有运气!当尝试使用服务器资源管理器连接到 Visual Studio 2022 中的 Microsoft Access 数据库时,每次都会引发此错误。我正在 Parallels Windows 11 虚拟机上进行开发,因为我的计算机是 MacBook Pro,而虚拟机是 64 位设备。我几乎要放弃一切,只是购买一台新的 Windows 计算机来尝试解决这个问题,因此,我们将非常感谢您提供的任何帮助!

我已经尝试安装所有 Microsoft Access 数据库引擎可再发行组件,但仍然收到此错误。我也尝试过更改目标平台,但仍然收到相同的错误。到目前为止我见过的每个论坛或视频都给出了这两个解决方案,所以我不知道从这里该去哪里!

c# ms-access visual-studio-2022 parallels redistributable
1个回答
0
投票

嗯,有几件事。

首先,您是强制项目使用 x32 位还是 x64 位?这个问题关系重大。虽然 .net 代码可以作为任何 CPU 运行,但非托管 Windows 代码则不能,因此您的 .net 项目必须与您安装的 Access 数据引擎的位大小相匹配。

请记住,使用 vs2022 会导致其他问题。如果您使用 x32 (x86) 版本的 Access,那么您可以在 vs2022 中使用连接生成器,但测试连接按钮将不起作用,并且永远不会起作用!

但是,当您运行代码时(假设强制为 x32 位),代码应该运行并且与 Access 数据引擎的连接应该可以正常工作。

因此,请记住,2022 年的 Visual Studio (VS) 是 VS 的第一个 x64 位版本。这意味着可以使用向导和连接生成器,但并非在所有情况下都可以使用。更好的解决方案是安装 x64 位版本的 Access 数据引擎。

您可以将项目设置为 x32 位并构建此类项目吗?甚至建立连接?

测试连接按钮将不起作用。无论项目的位大小设置如何,它都不会起作用。 (原因是连接生成器现在是 x64 位,它无法验证与 x32 位版本的 Access 的连接)。

当然,如果你安装的是 x64 位版本的 Access?那么是的,连接生成器和测试连接都可以工作。

那么,就像 8 位 Atari 计算机无法运行 16 位代码一样吗?你不能在 8 位 Atari 上运行 16 位代码吗?

嗯,自从计算机问世以来,您就遇到了同样的问题,因此您不能忽视混合 x32 和 x64 位软件的问题。

因此,假设您安装了 Access 数据引擎(x32 位版本)。您不必安装 MS-access,甚至不必安装 Access 运行时。但是,您需要安装 Access 数据引擎。

所以,第一步,这个链接:

Microsoft Access 数据库引擎 2016 可再发行组件 https://www.microsoft.com/en-us/download/details.aspx?id=54920

从上面来看,你最终会有两个选择。

因此,我们将假设 x32 位版本。

因此,从 vs2022 开始,让我们构建并设置连接。

因此,从vs中的项目属性、设置中,我们构建连接如下:

注意上面非常接近:

我们没有使用测试连接按钮。它不会工作,因为我们使用 access x32,而 VS 是 x64 位。

请注意,我们单击了高级选项卡,然后选择 ACE 数据引擎,而不是 JET 数据引擎。不要跳过使用高级按钮的这一步。

所以,现在确保项目设置为 x32 位,在这里:

我们假设访问 x32 (x86) 位。

如果您没有 x32 (x86) 选项,请添加新配置,并确保将项目设置为 x32 位。

因此,如上所述,我们不能使用测试连接,但我们当然可以使用该连接。即使在调试模式下,您也可以使用 f5 来运行。

因此,在表单中添加一个按钮和一个网格视图。

按钮代码是这样的:

    private void button1_Click(object sender, EventArgs e)
    {
        string strSQL
            = @"SELECT ID, FirstName, LastName, City, HotelName, Description
               FROM tblHotelsA ORDER BY HotelName";

        DataTable dt = new DataTable();

        using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB))
        {
            using (OleDbCommand cmd = new OleDbCommand(strSQL, conn))
            {
                conn.Open();
                dt.Load(cmd.ExecuteReader());
            }             
        }
        dataGridView1.DataSource = dt;
    }

现在的结果是这样的:

© www.soinside.com 2019 - 2024. All rights reserved.