【问题标题】:How can I include a read-only database in my program or executable?如何在我的程序或可执行文件中包含只读数据库?
【发布时间】:2017-03-28 23:10:52
【问题描述】:

我正在开发一个从本地数据库读取数据的小型 Windows 窗体程序,which I have created by following this guide.

我已经使用 Visual Studio 中的设计器在这些表中填充了数据,并且程序无法(也永远不会)在运行时更改此数据库,因为它们代表静态的已知数据-- 如果我在某处的构造函数中硬编码每个对应表行对象的实例化,我可以获得相同的结果。

当我让 Visual Studio 构建我的解决方案时,它会生成两个文件——打开表单的 .exe 和包含数据库表的 .mdf 文件。

两个相关的问题——使用包含这种只读数据的数据库是否有意义?如果是这样,有没有办法将 .MDF 文件合并到 .exe 中?同样,需要修改数据,所以我认为您不能修改 .exe 的事实不需要阻止这种情况。

【问题讨论】:

  • 取决于你如何使用数据库;如果您仅将它用作平面信息存储并且只是将所有数据加载到内存中,那么您怀疑数据库是一个糟糕的选择。另一种方法是将一些 XML 作为资源嵌入:stackoverflow.com/questions/2820384/…
  • 数据库文件只能由数据库引擎处理,所以不,没有填充到您的可执行文件中。如果您的数据足够大以至于将其存储为表仍然有意义(与 XML 资源相反),您可以查看像 SQLite 这样的轻量级选项。
  • @AlexK。它不是平面的,但 XML(或 JSON,我猜?)资源文件可能更有意义。这是一个有用的链接,谢谢。
  • 您可以在 SQL Server 中创建两个帐户。一个具有完全访问权限,另一个具有只读访问权限。

标签: c# sql-server


【解决方案1】:

是的,您可以这样做。但首先你需要构建你的数据集。我会用 SQL 或类似方法创建您的数据,然后将其与 XSD 架构一起导出到 XML。

然后在 Visual Studio 中,将 DataSet 对象添加到您的项目中。

然后您可以与 DataSet 对象对话并使用 XSD 和 XML 来填充它。

https://msdn.microsoft.com/en-us/library/atchhx4f(v=vs.110).aspx

要将这一切保存在 .EXE 中,请将您的 XML 数据嵌入到资源文件中,然后通过资源静态类访问它。

【讨论】:

  • 从数据库导出到 XML 非常棒。我想这正是我需要的!有没有办法在 Visual Studio 中做到这一点?
  • 我不确定。我一直使用 SQL 命令行 "sqlcmd -S -i input.sql -o output.xml"
  • 您需要在 SQL 中添加 :XML ON 属性。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 2015-07-31
  • 2019-01-17
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多