【问题标题】:Access 2010 runtime causes .NET OleDbConnection.Open() to fail with Access97 MDB fileAccess 2010 运行时导致 .NET OleDbConnection.Open() 使用 Access97 MDB 文件失败
【发布时间】:2011-10-30 20:54:49
【问题描述】:

我维护一个 .NET 3.5 应用程序(使用 Visual Studio 2008),它使用 Microsoft.ACE.OLEDB.12 的连接字符串提供程序和一个格式为 Access97 的 MDB 文件调用 OleDbConnection.Open()。此应用程序要求安装 Access 2007 Runtime。

如果安装了 Office 2007 运行时但未安装 Access 2010 运行时,则对 OleDbConnection.Open() 的调用成功。一旦安装了 Access 2010 Runtime(例如,用户安装了 Office 2010),调用就会失败。错误消息是“无法打开使用以前版本的应用程序创建的数据库。”

  1. 通过读取 StackOverflow 和其他地方的其他线程,Access 2010 似乎不支持读取或转换 Access97 MDB 文件。一旦安装了 Access 2010 Runtime(不卸载 Access 2010),是否无法调用 Office 2007 Runtime 的功能。

  2. 另一种方法是以编程方式从 Access97 MDB 转换为 Access 2010 可以读取的更高格式。我尝试调用: Microsoft.Office.Interop.Access.Application.ConvertAccessProject() 在 Microsoft Access 14.0 对象库中实现;安装了各种版本的 Access,但出现 COM 错误(80080005 服务器执行失败)。

  3. 我还尝试使用 /Convert 标志在我的应用程序中启动 msaccess.exe。这会导致 Access 2000 打开但出现错误消息(“Microsoft Access 无法转换...”)。

  4. 顺便说一下,MDB 数据库不包含任何“复杂”的东西,没有关系数据、没有宏、没有安全性等,只是平面记录。

  5. 我在 Allen Browne 的网站上找到了一些有用的编程技巧(http://allenbrowne.com/ser-48.html“Converting from Access97”和http://allenbrowne.com/Access2007.html“Converting to Access 2007”),但没有任何结果。

对解决这个问题的最佳方法有什么想法吗?

【问题讨论】:

    标签: .net ms-access oledb jet ms-jet-ace


    【解决方案1】:

    我会投票支持从 A97 格式转换为 Jet 4,这将在很长一段时间内得到广泛支持(即使 ACE 自 2007 年以来就已推出)。

    【讨论】:

    • 我必须支持 Access 97,因为它是我必须使用的几个遗留系统中的主要数据文件?我们是说没有办法做到这一点吗?
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 2014-01-30
    • 2011-09-23
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多