繁体   English   中英

VB.NET 使用 Windows 默认 ODBC JET 驱动程序连接到 MDB 文件

[英]VB.NET to connec to MDB file using windows default ODBC JET driver

我正在使用 VB.NET 6.0.5、Visual Basic 和 Visual Studio Community 2022 构建 Windows Winforms 桌面应用程序。

我曾经使用Microsoft Access Database Engine连接到 ACCDB 文件。

它在开发机器上运行良好,但是当我尝试部署到全新安装的 Windows 10 x64 机器时; 我必须让安装程序下载并安装 ACE 引擎。

我想尽可能减少先决条件,因为最终用户已经必须下载并安装 .NET 6 Runtime。

我发现所有版本的 Windows 默认都带有Microsoft Access Driver (*.mdb) ,我想使用它。

Windows 10 x64 全新副本中的驱动程序

驱动位置为: C:\Windows\SysWOW64\odbcad32.exe

我认为如果有人安装了 Office,它可能会将驱动程序更新为不同的Jet.OLEDB版本。

所以我的问题是:

如何检查当前Jet.OLEDB驱动程序的版本以及连接字符串是什么?

我当前的连接字符串是:

Dim cStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;User ID=Admin;Password=123;"

但是,它仍然给出了Microsoft.Jet.OLEDB.4.0 Provider is not registered

司机未注册

我知道 ACE Engine 和 ACCDB 工作得更好,但对我来说使用 JET 和 MDB 就足够了。

请帮忙!

谢谢

更新:20/5/2022

我尝试过但没有成功的事情:

  • 我将应用程序编译为以x86为目标,正如许多参考资料中所说的Jet.OLEDB不支持x64
  • 我试过Provider=Microsoft.Jet.OLEDB.10.0

好吧,如果您想知道连接字符串应该是什么? 让 VS 为您构建它。

(无论如何,您都不想提交代码或输入连接字符串 - 而且您不必这样做)。

因此,在为您的 VS 项目设置时,请在此处:

在此处输入图像描述

所以,让我们点击那个 [...] 并使用 JET(而不是 ACE)建立连接。

但是,您的问题/问题是 NOW vs2022 是 x64 位(第一个版本就是这样)。

我正在运行 2019 年,因此它仍将测试和验证 x32 位连接。 我怀疑 vs2022 不会通过“测试”按钮,但您仍然可以使用它来构建连接。

因此,在上面,我们启动了连接向导, - 为默认的 sql 服务器点击更改,我们现在有这个选择:

在此处输入图像描述

好的,我们选择了 Access,但是 JET 与 ACE 呢?

好吧,点击高级 - 这个:

在此处输入图像描述

现在我们可以(开始)选择提供商。

这个:

在此处输入图像描述

所以,你可以选择jet或ACE。

选择jet,那么我们现在回到这里:

在此处输入图像描述

现在因为我正在运行 vs2019,所以我的测试连接将起作用!!! - 对你来说,它可能不会。 因此,为您准备的测试连接按钮 - 您可以尝试一下,但即使它给出失败消息,您的连接仍然正常。

这个:

在此处输入图像描述

好的,至此,我们完成了。

我们现在在代码中可以在我们的代码中使用上述连接。 像这样说:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Using conn As New OleDbConnection(My.Settings.TestJET)
        Using cmdSQL As New OleDbCommand("SELECT * FROM tblHotels", conn)

            conn.Open()
            Dim rstData As New DataTable
            rstData.Load(cmdSQL.ExecuteReader)

            Dim strMSG As String =
                "There are " & rstData.Rows.Count & " Hotels in the database " & vbCrLf &
                "The first Hotel is " & rstData.Rows(0).Item("HotelName")

            MsgBox(strMSG, MsgBoxStyle.Information, "Table info")

        End Using
    End Using

End Sub

我们得到了这个:

在此处输入图像描述

现在,我想我可以查看连接字符串——但我从来没有真正这样做过——我总是让系统为我构建它。

我明白了:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\Rides_be.mdb

如您所述,请确保您的项目设置为 x32。 但是,由于您运行 vs2022,那么连接构建器应该可以工作,但是您必须运行您的项目来测试该连接,我不认为在 vs2022 中,您可以使用“测试”连接。

另一方面,由于大部分办公室(甚至 Access ACE 是 x64 位?)。 然后,如果您使用 x64 位 ACE 建立连接,那么您的测试连接按钮应该可以工作。

暂无
暂无

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

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