OpenCurrentDatabase生成System.AccessViolationException

时间:2018-04-30 18:45:40

标签: c# wpf ms-access com-interop office-automation

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

执行以下代码:

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

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

  

发生System.AccessViolationException HResult = 0x80004003
  Message =尝试读取或写入受保护的内存。这通常是一个   指示其他内存已损坏。
  Source = Microsoft.Office.Interop.Access StackTrace:at   Microsoft.Office.Interop.Access.ApplicationClass.OpenCurrentDatabase(字符串   filepath,Boolean Exclusive,String bstrPassword)at   AccessLauncher.WPF.Launcher.ExportFormsAndQueries(字符串   tempDbPathFile,String userDbPathFile)

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

我在几台PC上尝试过相同的代码,我只在安装了Access2016和Access97的PC上出现错误。不幸的是,这是一个要求,因为应用程序必须能够以两种格式创建不同的数据库 - 用户随后打开(在适当的Access97或Access2016中)进行编辑。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Access_2013放弃了对Access_97文件格式的支持。有些人报告称Access_2016对于 与Access_97文件完全无关 更加坚持。

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

  • 显然不是官方支持的配置,
  • 如果可以让它发挥作用,可能会成为持续头痛的根源。

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