首页 > 解决方案 > ACE OLEDB 连接到 Access Runtime 2016

问题描述

我有一个与Access 运行时 2013(32 位)集成的工作代码(读取 Excel 文件)。

我删除了 2013 版本,并安装了Access 运行时 2016版本。

这是我正在使用的连接字符串(适用于 2013 年):

Provider=Microsoft.ACE.OLEDB.15.0;Data Source=C:\\Users\\myuser\\Desktop//District.xls;Extended Properties=\"Excel 12.0;HDR=YES;\";

此外,使用Microsoft.Office.Interop.Excel 版本 15.0.0.0,运行时版本 v2.0.50727

当我运行代码时出现错误:

'Microsoft.ACE.OLEDB.15.0' 提供程序未在本地计算机上注册。

为了解决这个问题需要做什么?

编辑:我已经安装了 office 2016 x64、Access 2016 Runtime x64、Access Database Engine 2016 Redistributable x64。此外,将连接字符串更改为 Microsoft.ACE.OLEDB.16.0。收到错误信息

'Microsoft.ACE.OLEDB.16.0' 提供程序未在本地计算机上注册。

标签: c#excelms-accessruntimeoledb

解决方案


由于 Access 运行时和 office Click to run installs 的变化?现在所有的办公室都典型地作为虚拟化应用程序运行。这意味着现在当您安装 Access 2016 运行时时,它不会公开 ACE 数据库引擎的实例。

因此,您实际上不需要(甚至不想)安装整个大型运行时来使用 ACE 数据库引擎。在 2016 年之前(实际上对于一些 2013 年的 Access 安装),安装 access 运行时 = 在您的计算机上安装并注册了 ACE 数据引擎。

由于上述原因,如果您真的不需要启动和自动化 Access,则只需安装 ACE 数据引擎。正如对 Access 的 C2R 安装(或运行时)所指出的那样,您会发现 ACE 无论如何都没有公开和注册。

因此,您现在必须单独安装 ACE 数据引擎。您可以在此处找到副本:

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

如果您将 .net 项目强制为 x32,请确保获取 x32 位版本(如果您打算使用 x32 位,那么您必须将 .net 项目强制为 x86,因为如果您选择“任何”或 x64 ,那么在大多数情况下,您的 .net 项目会以 x64 运行,而这不适用于 Access(或 ACE)x32。

此外,最后但并非最不重要的是,虽然您的 ACE.15 参考有效,但据我所知,所有安装(Access 2010、2013、2016 和现在 2019)?作为一般规则,您应该发现

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test3\test44.accdb

因此,Office 的更高版本(大约 2013 年左右)将不再安装 + 暴露 ACE。对于 2016 年,情况几乎总是如此(ACE 未曝光)。

所以,安装 ACE。它也比整个运行时小得多,因此如果您实际上不需要 Access 运行时,而只需要 ACE,这是一个好处。

除了现在必须单独安装 ACE(在大多数情况下)之外,您发现使用 .12 作为 ACE 版本应该可以从 2010 版本一直到 2019 版本,而无需更改提供程序字符串。

编辑

我将测试 ACE 是否已安装并正常工作。我有一个示例 .net .exe(一个是 x32,一个是 x64),您可以尝试看看 ACE 是否正常工作。首先测试您是否可以浏览并打开 accDB 文件。如果可行,请尝试连接到 Excel。您需要先测试 + 检查 ACE 是否正常工作。

带有文件浏览以测试 ACE 的工作 x32 和 x64 在这里:

https://onedrive.live.com/embed?cid=B18A57CB5F6AF0FA&resid=B18A57CB5F6AF0FA%21101313&authkey=AB-I3mHVZhLmd2Q

您不需要(也没有帮助)使用办公室互操作程序集,因为您为此使用了 ACE 提供程序。互操作不提供office的使用,只提供一组参考,方便大家参考。如果 ACE 工作正常,那么您可以尝试连接到 Excel 的字符串,但您需要确保 ACE x64 工作正常。上面的 zip 文件有两个示例 - 运行它们,您就会知道您安装和工作的 ACE 版本。

编辑 2

要打开 2007 及更高版本的 Excel 文件?请记住,Excel 文件将其数据保存为 xml(所有办公文档也是如此 - 如果您将 xlsx 扩展名重命名为 zip,您现在可以将任何办公文档作为 xml 文件打开)

无论如何,对于 REAL 2007 格式文件,连接字符串将如下所示(以及更高版本 - 注意使用 xml 标签)

    Dim rstData As New DataTable
    Dim strCon As String = "Provider=Microsoft.ACE.OLEDB.12.0;" &
                           "Data Source=c:\test\tblHotels.xlsx;" &
                           "Extended Properties='Excel 12.0 Xml;HDR=YES'  "

    Using MyCon As New OleDbConnection(strCon)
        Dim daRead As New OleDbDataAdapter("select * from [tblHotels]", MyCon)
        daRead.Fill(rstData)
        With rstData
            If rstData.Rows.Count = 0 Then
                MsgBox("No data found")
            Else
                MsgBox("Rows of data found = " & .Rows.Count & vbCrLf &
                   "First row of data: HotelName = " & .Rows(0).Item("HotelName") & vbCrLf &
                   "Pk ID (first row) = " & .Rows(0).Item("ID"))
            End If
        End With
    End Using


End Sub

因此,对于 xlsx 格式,您必须包含“xml”部分:

Extended Properties='Excel 12.0 Xml;HDR=YES'  

它是一种 pre xml 格式,然后是二进制,例如 xls(如您所见),然后

Extended Properties='Excel 12.0;HDR=YES'

但是,我发现这适用于 xls 和 xlsx

    Dim strCon As String = "Provider=Microsoft.ACE.OLEDB.12.0;" &
                           "Data Source=c:\test\tblHotels.xlsx;" &
                           "Extended Properties='Excel 12.0;HDR=YES'  "

我在扩展属性周围使用了单引号 - 所以单引号或双引号都可以。

我也不知道为什么在你的连接字符串中,我看到一个“/”正斜杠?(为什么是这样??)。最好的猜测是 / 正斜杠 - 应该是 \

我不相信你需要安装 Excel 才能工作 - 但我会测试这个问题。


推荐阅读