OpenCurrentDatabase 生成 System.AccessViolationException

Posted

技术标签:

【中文标题】OpenCurrentDatabase 生成 System.AccessViolationException【英文标题】:OpenCurrentDatabase generates System.AccessViolationException 【发布时间】:2018-04-30 18:45:40 【问题描述】:

我有一个需要自动创建 Access 2016 数据库的 C# WPF 应用程序。

它执行以下代码:

try
            
                var tempDb = new Access.Application();
                tempDb.OpenCurrentDatabase(tempDbPathFile);

在 OpenCurrentDatabase 的行上引发了以下异常:

System.AccessViolationException 发生 HResult=0x80004003 Message=试图读取或写入受保护的内存。这通常是一个 指示其他内存已损坏。 Source=Microsoft.Office.Interop.Access StackTrace:在 Microsoft.Office.Interop.Access.ApplicationClass.OpenCurrentDatabase(字符串 文件路径,布尔独占,字符串 bstrPassword)在 AccessLauncher.WPF.Launcher.ExportFormsAndQueries(字符串 tempDbPathFile, String userDbPathFile)

我没有将互操作用于 Access97 - 仅用于 Access2016。应用程序必须与 97 进行的唯一交互是将现有的空 97 数据库复制到本地文件夹,然后通过 OleDbCommand 从 Sql Server 中选择来填充它。

我在几台 PC 上尝试了相同的代码,但我只在安装了 Access2016 和 Access97 的 PC 上收到错误。不幸的是,这是一项要求,因为应用程序必须能够以两种格式创建不同的数据库——用户随后打开(在 Access97 或 Access2016 中视情况而定)以进行编辑。

有什么办法可以解决这个问题吗?

【问题讨论】:

可能是 DLL 地狱,还有 32 位/64 位互操作的额外好处。 Access 97 中的 97 是 1997 年,也就是 20 多年前 你确定需要支持吗:-) --> maybe related,尤其是其接受答案中的连接字符串详细信息 是的,恐怕该应用程序需要与 Access97 一起使用 - 即使它比我想要的要旧。 您是否正在为 Access 97 使用互操作程序集???通常,您会为需要支持的最早版本使用 PIA,并且它“正常工作”。我预计 2010 年运行的 2016 年 PIA 会出现问题,更不用说 97 年了。 我没有将互操作用于 Access97 - 仅用于 Access2016。应用程序必须与 97 进行的唯一交互是将现有的“空”97 数据库复制到本地文件夹,然后通过 OleDbCommand 从 Sql Server 中选择来填充它 我会尝试从 Access97 生成一个互操作程序集(假设这是可能的?),并针对 that 编写代码。 IMO Access97 互操作库更可能与 Access 2016 一起使用,而不是看到 Access 2016 互操作与 Access97 一起使用。 【参考方案1】:

Access_2013 不再支持 Access_97 文件格式。有人报告说,Access_2016 更加坚持与 Access_97 文件完全无关

This question 更详细地讨论了这个问题。 TL;DR:需要同时支持 Access_2016 和 Access_97 的业务应用程序是

显然不是官方支持的配置,并且 如果它可以正常工作,可能会成为持续头痛的根源。

我的建议:咬紧牙关,远离 Access_97 文件格式。

【讨论】:

我别无选择,只能使用 Access97,因为第三方软件需要解决这个问题。供应商坚持它必须是 Access97,他们不会更新他们的代码以适用于更新的版本

以上是关于OpenCurrentDatabase 生成 System.AccessViolationException的主要内容,如果未能解决你的问题,请参考以下文章

c#.net 生成清晰缩略图

SY-SUBRC 的含义

ABAP常用的系统变量

windows cmd 生成文件目录树

1.8V升压5V 10A同步升压芯片 ZCC2007替代SY7065 /SY7066

隐藏字段技术