使用 Access 数据库部署 C# 应用程序,无需安装 Access
Posted
技术标签:
【中文标题】使用 Access 数据库部署 C# 应用程序,无需安装 Access【英文标题】:Deploy C# application with Access Database, without access instalation 【发布时间】:2021-07-13 08:56:18 【问题描述】: 上下文
对于更多的上下文,我工作的公司制作了一个在 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【问题讨论】:
【参考方案1】:是否有某种我们可以使用的 NugetPackage,以便客户可以与开箱即用的 AccessDatabase 进行交互
不,据我所知没有。
如果没有,是否有办法让他们不必重新安装所有 Office 产品?
您可以编写一个包装器来处理 32 位和 64 位版本的访问驱动程序。 IE。如果安装的驱动程序与您的程序是同一平台,您可以照常继续。如果它是另一个平台,您需要使用正确的平台启动一个新进程,并将所有数据库工作委托给该进程。如果您的进程是 anyCPU 并且在 64 位 Windows 上运行,则实际平台将取决于“首选 32 位”标志。
另一种选择是构建整个应用程序的 32 位和 64 位版本并运行与办公室安装匹配的版本。这可能更容易,但如果您有其他特定于平台的依赖项,则可能无法正常工作。
这一切都假设 office 已经安装,如果没有,您可以部署具有正确位数的独立 ace 驱动程序(即 AccessDataBaseEngine)。数据库文件本身与平台无关,可以通过 32 位或 64 位进程访问。驱动程序必须是正确的版本。
请注意,Access 有点难以使用,而且很容易出错。如果该产品旨在长期使用,我建议尽快迁移到更好的产品。 SqlLite 是一种流行的嵌入式数据库引擎,可以作为替代方案。
【讨论】:
感谢您的快速回复,是否可以在已经安装了 64 位 Office 的系统上安装 32 位驱动程序?如果是这样,您建议我如何解决? @stefan Melarkie 不久前我把它搞砸了,我建议创建一个新的虚拟机并对其进行测试。这样,您就有了一个可控的环境,您可以在其中轻松恢复到以前的快照。测试应该是检查是否可行的最可靠方法。以上是关于使用 Access 数据库部署 C# 应用程序,无需安装 Access的主要内容,如果未能解决你的问题,请参考以下文章