VB.net-获取错误“;试图读取或写入受保护内存…“;由于提供程序已更改

VB.net-获取错误“;试图读取或写入受保护内存…“;由于提供程序已更改,vb.net,ms-access,access-violation,provider,jet,Vb.net,Ms Access,Access Violation,Provider,Jet,这是我在这里的第一篇文章,所以请指出我是否缺少一些有用的信息来帮助解决我的问题 这是: 我有一个使用Access数据库(.mdb)的VB.net应用程序,多年来一直运行正常。 因为我现在使用64位的Access Database Engine 2016,所以我已将我的DB连接提供程序从Microsoft.Jet.OLEDB.4.0(仅32位可用)更改为Microsoft.ACE.OLEDB.12.0。我还未选中我的应用程序的属性“32位优先”(翻译自我的法语版Visual Studio) 由于我

这是我在这里的第一篇文章,所以请指出我是否缺少一些有用的信息来帮助解决我的问题

这是:

我有一个使用Access数据库(.mdb)的VB.net应用程序,多年来一直运行正常。 因为我现在使用64位的Access Database Engine 2016,所以我已将我的DB连接提供程序从Microsoft.Jet.OLEDB.4.0(仅32位可用)更改为Microsoft.ACE.OLEDB.12.0。我还未选中我的应用程序的属性“32位优先”(翻译自我的法语版Visual Studio)

由于我做了这些更改(并且只做了这些更改),因此经常会出现以下错误:

System.AccessViolationException:'尝试读取或写入 受保护的内存。这通常表示其他内存正在使用 腐败

它(随机)出现在软件的不同部分,总是在myConnection.Open()行

我开始遇到此问题的第一个新连接字符串是:

Public S7ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & ";Jet OLEDB:Database Password=***;"   
(其中DBPath是Access.mdb文件路径的字符串)

经过一些搜索,我了解到添加OLEDB服务=-1可以解决这个问题。它确实大大提高了数据库进程的速度,但并没有解决问题

你有什么办法解决这个问题吗


谢谢您和问候。

我已经卸载了Access Database Engine 2016并安装了2010 64位版本,现在它似乎工作正常


谢谢你的建议,@Jimi,帮助我解决了这个问题。我没想到“Microsoft.ACE.OLEDB.12.0”提供程序与MS Access数据库引擎2016不兼容

请查看您是否已安装Microsoft.ACE.OLEDB.12.0或Microsoft.ACE.OLEDB.16.0的64位版本。但您可能不需要64位版本。如果您只想与OleDb提供程序一起使用Access数据库,则安装的Office版本不相关。你的应用的位需要与提供商的位匹配。删除
OLE DB Services=-1
。如果您需要添加详细信息,请编辑您的问题。在问题正文的正下方有一个
edit
链接。发布完整的连接字符串:
DBPath
在此未知。您需要发布实际值。您没有指定Access数据库格式是2007-2016还是2007年之前。另外,如果您已经安装了
Access数据库引擎2016
(64位),则提供程序是
Microsoft.ACE.OLEDB.16.0
。是的,但是您读过我最后的评论吗?您必须发布
DBPath
的内容,而不是描述它是什么您安装了什么64位提供程序?2010年还是2016年?如前所述,如果是后者,则提供程序是
Microsoft.ACE.OLEDB.16.0
,而不是
Microsoft.ACE.OLEDB.12.0
。这有点混乱。如果您安装了ACE 16,您可以而且应该仍然能够使用ACE 12。
Public S7ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & ";Jet OLEDB:Database Password=***;"