在WPF应用程序中嵌入SQL Server CE

时间:2016-01-20 11:33:34

标签: sql-server-ce

首先,让我解释一下我想要实现的目标:我正在尝试创建一个可移植Windows应用程序(32位),它执行排序索引并将其存储在数据库中。我希望应用程序在数据库管理方面是自包含的。每当应用程序运行时,它应该查看预先确定的位置(可能是App数据)以查看数据库是否存在,如果数据库不存在(由用户删除或首次运行),则使用我将附加到Exe。

的脚本

我决定使用SQL Server CE来满足我的要求,并且它可以很好地工作,它允许我动态创建数据库并在其中生成表(如果有的话)。但我无法将其合并到Portable应用程序中。如果我必须与任何人分享我的应用程序,我必须分别与dll分享exe,这是我想要避免的。有问题的主要的DLL是我需要提供的System.Data.SqlServerCe.dll,但是这个dll依赖于某些本机dll:Microsoft.VC90.CRT,sqlceca40.dll,sqlcecompact40.dll,sqlceer40EN.dll,sqlceme40.dll, sqlceqp40.dll,sqlcese40.dll(它们位于自己的单独文件夹结构中 - x86和amd64)。

我决定尝试将dll嵌入到我的exe中,并使用此答案中显示的代码:Embedding unmanaged dll into a managed C# dll(Mark的答案),我成功地做了同样但是应用程序无法加载本机dll作为System.Data.SqlServerCe.dll查找本机dll,期望文件夹结构的存在,但是嵌入式资源中不存在该文件夹结构并且失败。

那么如何在不诉诸安装程序的情况下解决此问题?或者可能有任何其他更好的方法来实现我的目标?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您应该仅将您的应用标记为x86。 然后将非托管dll和System.Data.SqlServerCe.dll解压缩到与.exe相同的文件夹中。 需要安装vc ++运行时(或.net 3,5 sp1,它安装vc ++运行时)