Ms access X64和MS.ACE.OLEDB.12.0提供程序

Ms access X64和MS.ACE.OLEDB.12.0提供程序,ms-access,visual-studio-2015,oledbconnection,Ms Access,Visual Studio 2015,Oledbconnection,我注意到许多人对导致消息“midrosoft.ace.oledb.12.0提供程序未在本地计算机上注册”的原因进行了回复,即使它已注册。有效的补救方法是在我的MS 2015项目中使用X86版本 然而,我不想就此罢休。当我尝试在X64下测试与我的*.MDB或*.AECCB数据库的连接时,VS 2015选择了所述提供商,然后说它未注册。(它和一个16.0提供程序在一起。)如果我尝试测试与*.mdb的连接,它会选择OLEDB.JET.4.0提供程序,并表示连接成功。然而,当X64构建完成时,我发现情况

我注意到许多人对导致消息“midrosoft.ace.oledb.12.0提供程序未在本地计算机上注册”的原因进行了回复,即使它已注册。有效的补救方法是在我的MS 2015项目中使用X86版本

然而,我不想就此罢休。当我尝试在X64下测试与我的*.MDB或*.AECCB数据库的连接时,VS 2015选择了所述提供商,然后说它未注册。(它和一个16.0提供程序在一起。)如果我尝试测试与*.mdb的连接,它会选择OLEDB.JET.4.0提供程序,并表示连接成功。然而,当X64构建完成时,我发现情况并非如此


有没有办法让VS2015放弃对32位构建的固定?我没有在我的技术PC上安装Office。access数据库连接问题是一个问题,它阻止我退休,并将我支持的所有软件留给具有64位体系结构的同事。升级到VS 2019会有帮助吗?

嗯,你不能混合使用x32位软件和x64位软件

想想为什么你的苹果II 8位软件不能在你的新电脑上运行

事实上,想想为什么Windows3.1(16位软件)不能在Windows10上运行

因此,您不能突然改变整个处理器体系结构,期望一切正常。如果要运行或希望以x64位运行应用程序,则需要安装ACE的x64位版本,然后将项目从x86位更改为x64位

 If I try to test the connection with the *.mdb, it chooses the OLEDB.JET.4.0 provider
 and says the connection is successful. However, when the X64 build is done, I find otherwise.
是的,connect说它可以工作,但是当你运行它时,它就不能工作了。原因是“测试”连接是VisualStudio的一部分。Visual Studio是一个32位的程序。所以,如果您安装了ACE x32,当您点击测试连接时,它将始终工作,并且无论您的项目设置为x86还是x64,它都会工作

而VS只是一个x32位的程序?它能够启动(并调试)进程内x64位程序。但是一些测试连接的conneciton建筑商?在开发过程中,它们作为x32位运行

总之: 如果安装ACE x64? 然后测试连接将始终失败-因为VS是x32位。但是如果您安装了x64 ACE并将项目设置为x64?然后当你运行它时,它就会工作

总之: 如果安装ACE x32。 然后测试连接将始终工作。如果您将项目设置为x64,它甚至可以工作,因为测试连接选项与VS一样以x32位运行

但是,如果安装ACE x64?然后,无论项目设置是x64还是x86,测试连接都将不起作用。这是因为如上所述,VS是一个x32位程序

因此,如果您希望运行并使用ACE x64,那么您可以在VS中使用连接生成器,但是测试连接将始终失败-即使您正确安装了ACE x64

因此不同的处理器架构不能混合——事实上,甚至包括VS——它作为x32位程序运行,因此连接测试人员不再试图在代码中混合处理器架构

当然,处理器架构的混合和匹配不适用于我们所称的托管代码或.net代码。这是因为.net代码被编译成一个中间的lanauge和p代码。在运行时,在运行时会发生第二次编译和附加编译,因此x32或x64可以使用此类代码甚至.dll,甚至可以使用“任意”cpu

但是,如果您使用的是非.net的外部编译代码,则此类代码是不受管理的,并且已经编译为给定位大小的机器代码。因此,.net代码的位大小设置必须匹配。实际上,您可以选择“任意cpu”,问题是,如果应用程序以x64位或x32位启动,那么您将失去控制。在VS内部开发时,如果选择“any”,那么由于VS是一个x32位的程序,那么任何CPU都将导致一个x32位的运行

但是,如果您使用任何cpu进行编译?然后,如果启动windows x32位命令行并启动.exe?您将得到一个运行x32位程序的进程内程序

如果您使用相同的任何cpu并启动windows x64位命令行,然后启动.exe?您将获得一个运行x64位程序的进程内程序

因此,即使使用任何cpu设置,一旦该程序以x32或x64启动,它仍保持原样,并且调用的任何第三方外部(非托管代码)必须与该点的位大小匹配。因此,尽管.net程序可以以x32/x64位运行,但一旦它们以一位大小开始运行,那么作为外部库使用的任何和所有例程也必须与位大小匹配

那么,总而言之? 这意味着您希望强制项目设置以给定的位大小运行(如果有必要)。这意味着避免使用任何cpu,因此您会强制解决该问题

但是,请记住,如果强制/设置项目为x64位,那么如果尝试使用连接生成器“测试”选项,任何未管理的代码系统(如ACE)都将失败,因为VS和IDE在该时间点以x32位运行

编辑: 我有一个zip文件中的微型测试连接器.exe,您可以下载。请尝试使用包含的.exe的两个版本,看看哪一个版本有效

链接:

嗯,您不能混合使用x32位软件和x64位软件

想想为什么你的苹果II 8位软件不能在你的新电脑上运行

事实上,想想为什么Windows3.1(16位软件)不能在Windows10上运行

因此,您不能突然改变整个处理器体系结构,期望一切正常。如果要运行或希望以x64位运行应用程序,则需要安装ACE的x64位版本,然后将项目从x86位更改为x64位

 If I try to test the connection with the *.mdb, it chooses the OLEDB.JET.4.0 provider
 and says the connection is successful. However, when the X64 build is done, I find otherwise.
是的,connect说它可以工作,但是当你运行它时,它就不能工作了。原因是“测试”连接是VisualStudio的一部分。Visual Studio是一个32位的程序。因此,如果您安装了ACE x32,当您点击测试连接时,它将