使用具有自定义扩展名的 SDF 文件(SQLCE 数据库)作为我的 WPF 应用程序的数据文件类型

Posted

技术标签:

【中文标题】使用具有自定义扩展名的 SDF 文件(SQLCE 数据库)作为我的 WPF 应用程序的数据文件类型【英文标题】:Using an SDF file (SQLCE database) with a custom extension as my WPF application's data file type 【发布时间】:2011-05-14 11:34:37 【问题描述】:

我正在 WPF (.NET 4) 中构建应用程序

我的应用程序创建、打开和保存具有自定义扩展名的数据文件(为了清楚起见,我将它们称为 .myapp 文件)。我正在使用安装程序项目将 .myapp 文件与我安装的程序相关联,并且我已经为它们提供了自己的图标/操作/等)

.myapp 文件只是一个 SQLCE 3.5 数据库文件,其扩展名从 .sdf 更改为 .myapp

它正在工作,但我正在寻找有关这是否是一种好方法的建议。

我的一部分想知道是否应该将 .myapp 文件制作为包装文件,其中包含 SDF 以及一些元数据。我假设这样做,我需要在打开文件时将 SDF 加载到内存中,然后负责将其“保存”回文件。我考虑这个选项的原因是:

    它可以让我在 sdf 旁边存储其他元数据,例如预期的应用程序版本、其他快速可读的属性等。 它将允许我以只读模式打开文件(即不保存它们) 它将(更多)防止有人将扩展名重命名为 .sdf 并使用 SQL Management Studio 打开它并弄乱数据。

这是一种可能/更好的方法吗?通过将 SDF 加载到内存中,我会看到性能优势吗?有什么需要注意的陷阱吗?

任何其他建议表示赞赏!

【问题讨论】:

【参考方案1】:

在您的 sdf 文件上使用自定义文档扩展名是一个绝妙的主意。但是,将 sdf 文件包装在另一个文件中并“加载到内存中”是行不通的,因为您只能在 SQL Server Compact 连接字符串中指定文件路径。 SQL Server Compact 引擎为您管理“在内存中加载”并根据需要刷新到磁盘。

1:您可以通过将元数据存储在 sdf 文件的一个/多个表中来做到这一点。 2:以只读模式打开是一个连接字符串选项,因此您可以通过更改连接字符串来做到这一点。 3:您可以为文件指定一个密码(也在连接字符串中),这将加密数据库文件。

【讨论】:

谢谢!这节省了我很多尝试的时间。【参考方案2】:

另一个好处是您可以对文件进行简单的加密。这肯定会让没有人直接打开文件并更改数据的可能性更大。

【讨论】:

以上是关于使用具有自定义扩展名的 SDF 文件(SQLCE 数据库)作为我的 WPF 应用程序的数据文件类型的主要内容,如果未能解决你的问题,请参考以下文章

SQLCE数据工具(Flyhoward Ltd SDF Viewer)

在打开之前验证数据库文件架构

微软同步框架。 sdf 文件未与服务器同步

如何使用具有自定义文件扩展名的 H2 数据库?

无法从Web服务器复制Umbraco.sdf

在 ASP.NET 服务器上定位 .sdf 文件时出错