首页 > 解决方案 > 是否可以在未安装引擎的情况下使用 ADODB/OleDB 连接?

问题描述

故事:

遗留项目正在从 VBA 迁移到 VB.NET。关键功能之一是与 Excel 的连接。VBA 功能始终适用于任何机器 x32/x64、Windows 7/8/10,只需安装 Excel。

对于未安装 MS-Access 的用户,VB.NET 上的相同功能会引发错误。

System.Runtime.InteropServices.COMException: Provider cannot be found. It may not be properly installed.
at Microsoft.VisualBasic.CompilerServices.LateBinding.InternalLateCall(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack, Boolean IgnoreReturn)
   at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateCall(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack, Boolean IgnoreReturn)
   at ConsoleApp3.Module1.Main() in ...source\repos\ConsoleApp3\ConsoleApp3\Module1.vb:line 11 

问题:

用户没有管理员权限,因此任何需要安装任何软件的解决方案都不适用。

功能:

VBA 完美适用于任何地方:

Sub workingVBAFunction()
   Dim conn As Object
   Dim connStr As String
   Dim path As String
   path = ThisWorkbook.FullName
   connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & path & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
   Set conn = CreateObject("ADODB.Connection")
   Call conn.Open(connStr)
   conn.Close
   Set conn = Nothing
End Sub

VB.NET 仅适用于安装了 MS-Access 的机器:

Sub failingDotNETFunction()
    Dim conn As Object = CreateObject("ADODB.Connection")
    Dim connStr As String
    Dim path As String
    path = Environ("userprofile") & "\desktop\Book1.xlsm"
    connStr = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={path};Extended Properties=""Excel 12.0 Xml;HDR=YES;"";"
    conn.Open(connStr)
    conn.Close
End Sub

问题:

如何在没有 MS-Access 引擎的本地计算机上创建与 VB.NET 的连接?这应该是可能的,因为 VBA 以某种方式做到了。如何将 VBA 的行为复制到 VB.NET?

已经尝试过:

这些都不适用于没有 Access 的机器

标签: vb.netoledb

解决方案


推荐阅读