我有一个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中)进行编辑。
任何想法如何解决这个问题?
答案 0 :(得分:1)
Access_2013放弃了对Access_97文件格式的支持。有些人报告称Access_2016对于 与Access_97文件完全无关 更加坚持。
This question更详细地讨论了这个问题。 TL; DR:需要支持Access_2016和Access_97的业务应用程序
我的建议:咬紧牙关并远离Access_97文件格式。