Microsoft.ACE.OLEDB.12.0& # 39;提供程序未在本地计算机上注册错误

本文关键字:程序 计算机 错误 注册 OLEDB ACE Microsoft | 更新日期: 2023-09-27 18:01:44

我有两个不同的。net (c#)应用程序,都使用Microsoft.ACE.OLEDB.12.0.

当我在一台干净的机器上安装它们时- Windows 8.1 x64 -没有办公室或其他任何安装-当我试图从MS Access DB读取数据时,两者都给我"…OLEDB.12.0提供者未注册…"错误消息,这当然是预期的,因为我没有安装运行时。

当我安装MS Access Runtime时,奇怪的事情发生了。如果我安装x64版本,应用程序A读取msaccess或excel文件没有任何问题,但应用程序B仍然得到"…未注册"错误信息。然后我去卸载MS Access Runtime x64并安装x32。你猜怎么着?应用程序A停止工作,应用程序B正常工作…

我不知道那里发生了什么。

应用程序A使用以下连接字符串:

protected override void ConnectBase() { try { m_connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + m_filePath; m_connection = new OleDbConnection(m_connectionString); m_connection.Open(); m_command = new OleDbCommand("", m_connection); } catch (Exception ex) { throw new ConnectionException(ex.Message, ex); } }

应用程序B使用这个:

        protected override void LoadTableNames()
    {
        m_tableNames = new List<string>();
        if (string.IsNullOrWhiteSpace(DataSource))
            return;
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + DataSource;
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            connection.Open();
            DataTable allTables = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
            for (int i = 0; i < allTables.Rows.Count; i++)
                m_tableNames.Add(allTables.Rows[i]["TABLE_NAME"].ToString());
        }
    }

它们都将目标框架设置为4.0它们都有平台目标AnyCPU它们都是ClassLibrary (dll)

  • 调用应用程序A的exe将平台目标设置为x86

  • 调用应用程序B的exe也将平台目标设置为x86

我在这里错过了什么?有人知道吗?

Microsoft.ACE.OLEDB.12.0& # 39;提供程序未在本地计算机上注册错误

您所描述的症状- "x64 Access运行时:应用程序A工作正常/应用程序B失败,x32 Access运行时:应用程序A失败/应用程序B工作正常"听起来很像应用程序A是64位应用程序,而应用程序B是32位应用程序。每个版本都需要对应于其可执行类型的驱动程序的"位",因此为了使两者都工作,您可能需要同时安装 32和64位运行时(驱动程序)。