问题描述
上下文
对于更多的上下文,我工作的公司制作了一个在 MS Access 中运行的 Access vb.net 应用程序。他们想为它升级并创建一个 C# WPF 前端。这很有效,除了当我安装应用程序并下载 [dummyDB].accdb (32-bits 2016)
时,应用程序立即因错误而中断:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
然后我安装了 Microsoft 的 2010 AccessDataBaseEngine 并出现了一个新错误:This Database file requires a newer version of Access
我自然而然地回到微软,下载并安装了 2016 x64(我的系统是 64 位)并再次尝试。
遗憾的是,我们又回到了第一个错误。所以我尝试安装2016 32位AccessDataBaseEngine,但遇到了我已经安装了64位办公产品的问题。 (我也卸载了之前所有的 32 位 AccessDataseEngines)
我们当然不希望用户仅仅为了使用我们的应用程序而重新安装他们的所有 Office 产品。
问题
- 是否有某种 NugetPackage 可供我们使用,以便客户可以开箱即用地与 AccessDatabase 进行交互?
- 如果没有,是否有办法让他们不必重新安装所有 Office 产品?
ps。用户也不能选择 32 位和 64 位不同的数据库文件,因为不同系统的不同用户很可能必须访问相同的数据库文件。
我不知道我是否完全忘记了这里,但任何帮助将不胜感激
申请信息:
- WPF 应用程序(.Net Framework 4.7.2)
- 构建目标:任何cpu
解决方法
是否有某种我们可以使用的 NugetPackage,以便客户可以开箱即用地与 AccessDatabase 进行交互
不,据我所知。
如果没有,是否有办法让他们不必重新安装所有 Office 产品?
您可以编写一个包装器来处理 32 位和 64 位版本的访问驱动程序。 IE。如果安装的驱动程序与您的程序在同一平台上,您可以照常继续。如果它是另一个平台,您需要使用正确的平台启动一个新流程,并将所有数据库工作委托给这个流程。如果您的进程是 anyCPU 并且在 64 位 Windows 上运行,则实际平台将取决于“首选 32 位”标志。
另一种选择是构建整个应用程序的 32 位和 64 位版本,并运行与办公室安装匹配的版本。这可能更容易,但如果您有其他特定于平台的依赖项,则可能不起作用。
这一切都假设已经安装了 office,如果没有,您可以部署具有正确比特率的独立 ace 驱动程序(即 AccessDataBaseEngine)。数据库文件本身与平台无关,可以由 32 位或 64 位进程访问。它是需要正确版本的驱动程序。
请注意,Access 有点难以使用,而且很容易出错。如果该产品打算长期使用,我建议尽早迁移到更好的产品。 SqlLite 是一种流行的嵌入式数据库引擎,可以作为替代。