ACE OLEDB连接到访问运行时2016

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

我有一个与Access runtime 2013(32bit)集成的工作代码(读取Excel文件)。

我删除了2013版本,并安装了Access runtime 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数据库引擎2016 Redistributable x64。此外,将连接字符串更改为Microsoft.ACE.OLEDB.16.0。收到错误消息

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

c# excel ms-access runtime oledb
1个回答
0
投票

由于Access运行时和Office中的更改,请单击以运行安装?好了,现在所有办公室通常都作为虚拟化应用程序运行。这意味着现在安装Access 2016运行时时,它不会公开ACE数据库引擎的实例。

因此,您实际上不需要(甚至不需要)安装整个大型运行时,只需使用ACE数据库引擎即可。在2016年之前(实际上对于某些2013 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,因为如果选择“ any”,或x64,那么在大多数情况下,您的.net项目将以x64运行,并且不适用于Access(或ACE)x32。

同时,最后但并非最不重要的一点是,据我所知,对于所有安装(访问2010、2013、2016和现在的2019),您的ACE.15参考有效吗?通常,您应该找到

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

您不需要(也无济于事)使用Office互操作程序集,因为您为此使用了ACE提供程序。互操作者不提供办公室使用权,仅为您提供方便。如果ACE有效,则可以尝试将连接字符串连接到Excel,但是需要确保ACE x64可以正常工作。上面的zip文件有两个示例-都运行它们,您就会知道已安装并正在使用哪个版本的ACE。

编辑2

要打开2007及更高版本的Excel文件?请记住,Excel文件将其数据另存为xml(所有正式文档也是如此-如果将xlsx扩展名重命名为zip,则现在可以将任何office文档打开为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'  

这是一种预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才能正常工作-但我将测试此问题。

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