我试图从C#应用程序打开访问连接。正在通过以下方法打开连接:
ADOX.CatalogClass cat = new ADOX.CatalogClass();
System.IO.File.Delete(_AccessDatabaseName);
cat.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _AccessDatabaseName + "; Jet OLEDB:Engine Type=5");
cat = null;
_ErrorMessage = "";
return (true);
一切正常,直到我使用office 2016的后台工作者/线程调用这些方法。 我收到以下错误: 尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 有时即使这样: 没有可用的错误消息,结果代码:E_UNEXPECTED(0x8000FFFF)。 它接口的 ldb 仍然打开,所以当我创建它时无法访问mdb文件以便创建/插入到任何其他表中。 我安装了 accessruntime_4288-1001_x64_en-us.exe 和 AccessDatabaseEngine_X64.exe ,但错误相同。 即使尝试使用 cat.Create 创建mdb,应用程序也会冻结,直到我必须强制关闭它。
任何帮助都会很棒。
答案 0 :(得分:0)
我一直在为相同的问题寻找合适的解决方案,但没有成功。我的解决方法是不使用任何后台线程,或者,如果需要后台线程,请使用带有“ OLE DB SERVICES = -1”的连接字符串来启用池,以便其他连接可以重用ldb或laccdb,而无需创建新的。但是,如果在2016 Access Engine中超时(1分钟)后锁定文件消失,则池将呈现重新打开连接错误。因此,一个愚蠢的解决方案是创建另一个线程以打开连接并每分钟关闭它。
这似乎是MS Access Engine 2016中的错误。我希望有人可以帮助我不要使用这种疯狂的解决方法。