&引用;无法打开使用以前版本的应用程序创建的数据库";显示VB.NET程序尝试使用OleDBConnection打开MDB文件的时间

&引用;无法打开使用以前版本的应用程序创建的数据库";显示VB.NET程序尝试使用OleDBConnection打开MDB文件的时间,vb.net,ms-access,oledb,Vb.net,Ms Access,Oledb,我在32位Windows7操作系统中使用VB.NET创建了一个软件 它包含以下代码行: Dim cn As New OleDbConnection cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fileNameStr & ";Jet OLEDB:Database Password=xxxxxxx" cn.Open() 这些代码打开受密码保护的MDB文件(Microsoft

我在32位Windows7操作系统中使用VB.NET创建了一个软件

它包含以下代码行:

 Dim cn As New OleDbConnection
 cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fileNameStr & ";Jet OLEDB:Database Password=xxxxxxx"
 cn.Open()
这些代码打开受密码保护的MDB文件(Microsoft Access文件)

当我在电脑里运行这个软件时,它运行得很好

但是,在另一台计算机上测试时,会出现一条错误消息,说明“无法打开使用以前版本的应用程序创建的数据库”

错误消息显示在第三行代码之后。

你能告诉我我的错误在哪里,我如何解决这个问题吗

多谢各位

当我在电脑里运行这个软件时,它运行得很好

但是,在另一台计算机上测试时,会出现一条错误消息,说明“无法打开使用以前版本的应用程序创建的数据库”

当不同的计算机安装了不同版本的Access数据库引擎时,可能会发生这种情况。具体而言,如果出现以下情况,将显示错误消息:

  • .mdb文件为Access 97格式,并且
  • 机器具有Access数据库引擎的Access 2013(或更高版本)
Access 2013删除了对Access 97文件格式的支持

如果您的连接字符串包含

Provider=Microsoft.ACE.OLEDB.12.0
因为Access数据库引擎的Access 2007(12.0)、Access 2010(14.0)和Access 2013(15.0)版本都以“12.0”的名称注册提供程序,以提供某种程度的向后兼容性。因此,对于任何带有Access 2007+的给定计算机,您可以指定

Microsoft.ACE.OLEDB.12.0

但你实际使用的是

Access 2007计算机上的Microsoft.ACE.OLEDB.12.0
Access 2010计算机上的Microsoft.ACE.OLEDB.14.0
Access 2013计算机上的Microsoft.ACE.OLEDB.15.0


这就是为什么同一个第三方应用程序可以在一台机器(安装了Access 2007或2010)上打开.mdb文件,但不能在另一台机器(安装了Access 2013)上打开的原因。

博客文章中有一些VB.NET代码,将根据OLEDB提供程序的名称报告实际安装的版本(例如,
Microsoft.ACE.OLEDB.12.0
)。尝试将该代码添加到您的项目中,并让您的应用程序在启动时报告版本号。查看报告的版本在运行的计算机和不运行的计算机之间是否有所不同(参考,如果我使用,我的Office 2010计算机报告
14.0.7011.1000
)“Provider=Microsoft.ACE.OLEDB.15.0”要在安装了Access 2013的独立64位计算机上打开MDB文件,软件是否能够在不显示任何错误的情况下执行此任务?如果文件确实是Access 97格式的.Access 2013及其相应版本的Access数据库引擎(15.0),则不能执行此任务根本无法使用Access 97数据库文件。您必须将数据库文件升级到比Access 97格式更新的格式,或者必须将Access降级到2010版(或更早版本)并继续使用Microsoft.ACE.OLEDB.12.0。