ACE OLEDB 连接到 Access Runtime 2016
ACE OLEDB Connection to Access Runtime 2016
我有一个与 Access 运行时 2013(32 位)(读取 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
当我运行代码时出现错误:
The 'Microsoft.ACE.OLEDB.15.0' provider is not registered on the local machine.
需要做什么才能解决这个问题?
编辑:我安装了 Office 2016 x64、Access 2016 Runtime x64、Access Database Engine 2016 Redistributable x64。此外,将连接字符串更改为 Microsoft.ACE.OLEDB.16.0。收到错误消息
The 'Microsoft.ACE.OLEDB.16.0' provider is not registered on the local machine.
由于访问运行时间和办公室的变化点击运行安装?好吧,所有办公室现在都是典型的 运行s 作为虚拟化应用程序。这意味着现在当您安装 Access 2016 运行 时,它不会公开 ACE 数据库引擎的实例。
因此,您实际上不需要(甚至不想)安装整个 运行-time 就可以使用 ACE 数据库引擎。在 2016 年之前(实际上对于某些 2013 年的 Access 安装),安装 access 运行-time = 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。
此外,最后但并非最不重要的一点是,据我所知,所有安装(Access 2010、2013、2016 和现在的 2019),虽然您的 ACE.15 参考有效?作为一般规则,您应该会发现
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test3\test44.accdb
所以更高版本的 office(大约 2013 年开始)将不再安装 + 暴露 ACE。对于 2016 年,情况几乎总是如此(ACE 未公开)。
所以,安装 ACE。它也比整个 运行-time 小得多,因此如果您实际上不需要 Access 运行-time,但只需要 ACE,那么这是一个奖励。
除了现在必须单独安装 ACE(在大多数情况下)之外,您发现使用 .12 作为 ACE 版本应该可以从 2010 版一直到 2019 版,而无需更改提供程序字符串。
编辑
我会测试 ACE 是否已安装并正常工作。我有一个示例 .net .exe(一个是 x32,一个是 x64),您可以尝试查看 ACE 是否正常工作。首先测试您是否可以浏览和打开 accDB 文件。如果可行,则尝试连接到 Excel。您需要先测试 + 检查 ACE 是否正常工作。
带有文件浏览器以测试 ACE 的工作 x32 和 x64 在这里:
您不需要(也没有帮助)使用办公室互操作程序集,因为您为此使用了 ACE 提供程序。互操作不提供office的使用,仅提供一组参考,方便大家使用。如果 ACE 有效,那么您可以尝试将连接字符串设为 Excel,但您需要确保 ACE x64 有效。上面的 zip 文件有两个示例 - 运行 它们都是你知道你安装和工作的 ACE 版本。
编辑 2
要打开 2007 及更高版本的 Excel 文件?请记住,Excel 文件将其数据保存为 xml(所有 offce 文档也是如此 - 如果您将 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 才能正常工作 - 但我会测试这个问题。
我们发现该问题是多线程环境下的已知问题,目前没有解决方案。
可能最好继续使用更新的解决方案,因为这是访问 Excel 文件的旧方法。
我有一个与 Access 运行时 2013(32 位)(读取 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
当我运行代码时出现错误:
The 'Microsoft.ACE.OLEDB.15.0' provider is not registered on the local machine.
需要做什么才能解决这个问题?
编辑:我安装了 Office 2016 x64、Access 2016 Runtime x64、Access Database Engine 2016 Redistributable x64。此外,将连接字符串更改为 Microsoft.ACE.OLEDB.16.0。收到错误消息
The 'Microsoft.ACE.OLEDB.16.0' provider is not registered on the local machine.
由于访问运行时间和办公室的变化点击运行安装?好吧,所有办公室现在都是典型的 运行s 作为虚拟化应用程序。这意味着现在当您安装 Access 2016 运行 时,它不会公开 ACE 数据库引擎的实例。
因此,您实际上不需要(甚至不想)安装整个 运行-time 就可以使用 ACE 数据库引擎。在 2016 年之前(实际上对于某些 2013 年的 Access 安装),安装 access 运行-time = 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。
此外,最后但并非最不重要的一点是,据我所知,所有安装(Access 2010、2013、2016 和现在的 2019),虽然您的 ACE.15 参考有效?作为一般规则,您应该会发现
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\test3\test44.accdb
所以更高版本的 office(大约 2013 年开始)将不再安装 + 暴露 ACE。对于 2016 年,情况几乎总是如此(ACE 未公开)。
所以,安装 ACE。它也比整个 运行-time 小得多,因此如果您实际上不需要 Access 运行-time,但只需要 ACE,那么这是一个奖励。
除了现在必须单独安装 ACE(在大多数情况下)之外,您发现使用 .12 作为 ACE 版本应该可以从 2010 版一直到 2019 版,而无需更改提供程序字符串。
编辑
我会测试 ACE 是否已安装并正常工作。我有一个示例 .net .exe(一个是 x32,一个是 x64),您可以尝试查看 ACE 是否正常工作。首先测试您是否可以浏览和打开 accDB 文件。如果可行,则尝试连接到 Excel。您需要先测试 + 检查 ACE 是否正常工作。
带有文件浏览器以测试 ACE 的工作 x32 和 x64 在这里:
您不需要(也没有帮助)使用办公室互操作程序集,因为您为此使用了 ACE 提供程序。互操作不提供office的使用,仅提供一组参考,方便大家使用。如果 ACE 有效,那么您可以尝试将连接字符串设为 Excel,但您需要确保 ACE x64 有效。上面的 zip 文件有两个示例 - 运行 它们都是你知道你安装和工作的 ACE 版本。
编辑 2
要打开 2007 及更高版本的 Excel 文件?请记住,Excel 文件将其数据保存为 xml(所有 offce 文档也是如此 - 如果您将 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 才能正常工作 - 但我会测试这个问题。
我们发现该问题是多线程环境下的已知问题,目前没有解决方案。
可能最好继续使用更新的解决方案,因为这是访问 Excel 文件的旧方法。