繁体   English   中英

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

[英]Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine error

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

当我将它们都安装在干净的计算机上-Windows 8.1 x64-未安装办公室或其他任何设备时,-尝试从MS读取数据时,都出现“ ... OLEDB.12.0提供程序未注册...”错误消息Access DB,因为我没有安装运行时,所以当然可以预期。

当我安装MS Access运行时时,会发生奇怪的事情。 如果我安装了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

我在这里想念什么? 任何人?

您正在描述的症状-“ x64 Access运行时:App A正常运行/ App B失败,x32 Access runtime:App A异常/ App B运行正常”听起来很像App A是64位应用程序,而App B是32位应用程序位应用程序。 每个版本都需要相应的它的可执行文件类型的驱动程序“位数”,因此要获得双方的工作,你可能需要同时安装32位和64位运行时(司机)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM