【问题标题】:Connection problem between Visual Basic .NET and Access DatabaseVisual Basic .NET 和 Access 数据库之间的连接问题
【发布时间】:2020-10-05 17:54:38
【问题描述】:

我在这里遇到了问题。 Visual Basic .NET 和 Access 数据库之间存在连接问题。

在第一个场景中,我使用的访问文件类型是 .accdb。当我试图链接 Access 和 .Net 之间的连接时,有一个消息框显示我没有安装 Access 引擎(但我安装了)。仅供参考,我安装的是 x64 版本。

在第二种情况下,我使用的访问文件类型是 .mdb。但是,在这次尝试中,连接是成功的。

所以...有人可以简单解释一下,这是我的计算机的常见问题还是我安装了错误版本的访问引擎?非常感谢您的帮助,谢谢。

【问题讨论】:

  • 您使用的是 OLE-DB 还是 ODBC?我建议只使用 32 位 ODBC 驱动程序(并将您的 VB.NET 程序编译为 32 位可执行文件)。
  • 另外,请发布您的完整连接字符串。请注意,Access 数据库的文件格式版本(例如 97、2002、2003、2007+)很重要,因为 ACE 和 JET Red 驱动程序并非跨所有文件版本和主机 ISA 交叉兼容(老实说, MS Access 生态系统现在一团糟——自 2003 年以来 Access 没有收到任何真正的更新,自 1997 年以来它的 SQL 引擎也没有改变...... smh Microsoft)
  • Imports System.Data.OleDb Public Class Login Dim con As New OleDbConnection Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=oceana.mdb" con.Open() End Sub
  • @Dai,嗨,我正在使用 .Jet。因为访问文件类型是.mdb
  • 您可以毫无问题地使用 ACE OleDb 提供程序(12 或 16)读取 .mdb 文件。

标签: vb.net visual-studio ms-access


【解决方案1】:

Jet 仅提供 32 位格式,因此,如果可行,您的应用程序必须是 32 位的。这可以解释为什么 64 位版本的 ACE 不适用于 ACCDB 文件。这意味着,要使用 ACE,您要么需要安装 32 位版本,要么您的应用需要 64 位。

一般建议您安装 32 位 ACE,除非您特别需要 64 位。这是因为 Office 通常是 32 位的(这是 Microsoft 推荐的,尽管如果您需要特定的优势可以使用 64 位),而 VS 应用程序默认是 32 位的(任何 CPU,首选 32 位)。

如果您的项目以 x86 平台为目标,那么它将始终为 32 位,并且无法在不支持 32 位的系统上运行。如果您的项目以 x64 平台为目标,那么它将始终为 64 位,并且不会在不支持 64 位的系统上运行。如果您的项目以 Any CPU 为目标并且选中了 Prefer 32-bit,那么如果可以,它将是 32 位,否则它将是 64 位。如果您的项目以 Any CPU 为目标,并且未选中 Prefer 32-bit,那么如果可以,它将是 64 位,否则它将是 32 位。

编辑:

对于不理解这一点的人,假设您使用的是 Intel/AMD 的 64 位 Windows,请尝试以下操作:

  1. 创建一个新的 VB 控制台应用程序项目。
  2. 添加以下代码:
Module Module1

    Sub Main()
        Console.WriteLine(If(Environment.Is64BitProcess, "64-bit", "32-bit"))
        Console.ReadLine()
    End Sub

End Module
  1. 打开项目属性的编译页面。
  2. 目标 CPU 设置为 x86 并运行项目。
  3. Target CPU 设置为 Any CPU,选中 Prefer 32-bit 框并运行项目。
  4. Target CPU 设置为 Any CPU,取消选中 Prefer 32-bit 框并运行项目。
  5. 目标 CPU 设置为 x64 并运行项目。

您会看到前两种情况显示“32 位”,后两种情况显示“64 位”,正如我上面解释的那样。

请注意,Is64BitProcess 属性至少需要 .NET Framework 4.0 或 .NET Core 2.0。

【讨论】:

  • OIC,我的 Visual Studio 应用程序在安装过程中自动保存在 Program Files (x86) 中,所以我的应用程序是 32 位的应该是有道理的,感谢您的帮助。
  • 如果您将项目设置为“任何 cpu”,它将以 x32 运行。这是因为 Visual Studio 是 x32,因此在调试会话或 f5 运行期间,您将获得 x32 位版本。那么,如果您要进行测试或调试并且想要 x64 位?然后你必须强制 .net 项目为 x64 位,因此它将以 x64 位运行 + 启动。这也解释了为什么 mdb 文件有效,因为所有版本的 windows 都默认安装了 x32 位版本。但是对于 accdb 文件,您必须安装 ACE。既然你真的安装了 x64 位 ACE?然后你必须设置 + 运行你的 .net 应用程序为 x64 才能正常工作。
  • @AlbertD.Kallal,这不是真的。首先,没有 x32 这样的东西。有 x86 和 32 位。其次,VS是32位的事实是无关紧要的。第三,针对Any CPU 并不意味着程序将在32 位进程中运行。如果您阅读了我的答案,那么您将了解它的实际含义。 任何 CPU 表示它可以运行 32 位或 64 位,但首选模式由 首选 32 位 复选框指定。您似乎试图重复我的回答,但弄错了。如果您对此问题有任何疑问,请对问题发表评论。
  • 上下文老兄 - 一切都是上下文!是的,x86“进程”是 20 多年的意思是 x32 位进程(辩论结束!!!)。我的意思是 FROM VS ANY CPU 总是会产生 x32 位进程。如果您在 VS 之外启动应用程序,那么正如您所说,任何 CPU 都可以自动采用“进程内”位大小。这意味着如果您要使用 x64 进行测试,那么您不能在 VS 中使用 ANY 进行该测试。因此,理论上您可以在部署之前将其更改回任何 CPU。不,没有 x86 和 32 位(您的 type-o)。我们有 ANY、x64、x86 可供选择
  • 首先,再一次,没有 x32 这样的东西。有 x86 平台和 32 位。 x32 位不是一个东西。其次,这是完全错误的:“我的意思是,FROM VS ANY CPU 总是会产生 x32 位进程”。阅读我的答案的编辑并按照说明自行查看。
猜你喜欢
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多