【问题标题】:If I'm not going to be saving data into an SQL database, where should I be saving it?如果我不打算将数据保存到 SQL 数据库中,我应该将其保存在哪里?
【发布时间】:2010-12-28 06:07:15
【问题描述】:

我正在制作一个类似于《魔兽世界》RAWR 的百科全书程序。我不会将数据保存到 SQL 数据库中,但是当我确定这些较轻的情况有替代方案时,我已经习惯了总是这样做。

例如,我的程序不会通过用户输入创建新数据,也不会通过用户输入删除数据。只是一个程序,它将显示我在其中编码的信息。不多也不少。

我应该把这些东西保存在哪里?保存我的意思是,在我发布程序时存储它们以供部署。

我主要只是保存字符串变量和一些视频/动画 (see my other question)

感谢您的帮助。一如既往,你们摇滚!

【问题讨论】:

  • @Joel,如果他不需要查询能力,拥有大量二进制数据并且正在构建桌面应用程序,他为什么要使用数据库?

标签: c# storing-information


【解决方案1】:

我的第一个想法是 XML(首选)或 Mark Ewer 和 Yetapb 建议的二进制文件。 SQLLite 的建议听起来也不错。

另一个选项是使用 OleDb 提供程序的 Excel 电子表格。您将使用 SQL 语句来读取和写入数据。如果您走 Excel 路线,请知道有一些怪癖需要习惯,例如: 1) 在工作簿中指定要引用的工作表的方式(类似于在 SQL + 美元符号和一些括号中引用表的方式)。 2) 如果你有一列只有文本,但一个单元格有一个数字 OleDb 会出现异常,除非你稍微处理一下数据。我知道这听起来很奇怪,但这只是提醒一下。

我确信在使用 .NET 中的 Excel 时还有其他一些小问题需要克服,但我在现实世界中只做过两次(尽管两次都涉及大量数据)。对于企业环境,我绝对不会推荐它。

我建议将多媒体存储在您的文件系统中,无论您采用哪种方式。然后让数据记录无论是 SQL、Excel、XML 还是二进制指向文件名。它将使您的数据管理更加轻松。

【讨论】:

    【解决方案2】:

    良好的旧文件系统有什么问题?

    您只需在应用程序文件夹下创建一个子文件夹,并且在您的代码中始终使用相对于应用程序文件夹的路径来引用该子文件夹中的文件。例如。

    string imagePath=Path.Combine(Environment.CurrentDirectory,"SubFolderName\\picture.jpg");
    

    我自己使用过 SQLite 并喜欢它,但即使它也可能无法满足您的需求,因为您没有说您需要执行许多查询操作。

    此外,SQL Server / SQLite 等关系数据库并不是存储二进制数据的理想选择。他们绝对可以,但这不是他们最擅长的,因为他们可能会遇到扩展问题。

    如果您有很多二进制文件,例如图像、音乐、视频等,那么我的首选是文件系统。

    部署很简单,只需将所有需要的资源文件放在子文件夹中,然后将子文件夹放在应用程序文件夹中。

    另一种选择是将文件存储为嵌入式程序集资源。这可以在主应用程序可执行文件中,或者如果您有较大的文件,则可以在单独的 dll 程序集中。您说用户不会添加或删除文件,所以这是一个可行的选择。

    【讨论】:

      【解决方案3】:

      我的答案取决于您所谈论的数据量。从纯粹的设计角度来看,您应该始终将数据与应用程序逻辑分开。所以,你想要一个外部数据文件。但是,如果你真的没有那么多数据并且它是相对静态的,那么你可以把它放在一个 XML 文件中,然后使用 Linq to XML 来查询数据。看看XDocument class

      话虽如此,数据库通常确实让您的生活更轻松,特别是如果您获得了一个良好的对象到关系映射工具或对象数据库。我建议您考虑使用SubSonic SimpleRepository 之类的东西将您的数据放入SQLite database。或者,更好的是,看看使用pure object database like DB4O

      【讨论】:

      • +1 我同意,逻辑和数据应该始终分开。让生活更轻松。
      【解决方案4】:

      静态数据的数据库有什么问题?没有数据是静态的,如果您在数据库中使用数据库,则创建数据包的管理/设计程序会容易得多。如果您将其存储在平面文件中,您真的要编写查询逻辑来决定如何查找数据还是只是发出一个简单的 SQL 查询?

      使用System.Data.Sqlite 它可以让你使用一个嵌入式数据库,一个没有服务器进程的单一数据文件。这是一个非常受欢迎的数据库,我敢打赌你每天都会与它互动。此外,它还支持 Visual Studio 中用于设计数据和与数据交互的所有出色 RAD 功能。

      【讨论】:

      • 你让我卖了我的好人。但是,如果我因为我从未使用过 Sqlite 而失败,我会敲你的门寻求帮助! :D 再次感谢! :D
      • Josh,你能分享一个关于如何使用它的初学者教程吗?我知道用谷歌搜索什么。
      • SQLite 只是一个数据库,而 System.Data.Sqlite 是它的 ADO.NET 提供程序。因此,您可以像使用任何其他 ADO.NET 提供程序一样使用它,也可以通过您最喜欢的 ORM 使用它。 System.Data.Sqlite 还包括一个基本的 GUI 数据库编辑器,它集成到 VS2008 服务器资源管理器中。有什么具体的需要教程吗?如果是这样,也许值得作为一个单独的问题提出?
      • 我同意 itowlson 关于提出更多问题的说法!非常适合社区,但实际上您只需要知道连接字符串看起来像这样Data Source=filename;Version=3;。更酷的是,如果你真的希望它在生产应用程序中只读,只需将Read Only=true 添加到连接字符串中,我相信这可以缓解一些并发速度下降,因为不需要锁定。
      • 只是为了避免混淆 System.Data.Sqlite 实际上是在内部实现了整个 SQLite3 引擎。您不需要 anything else 来创建完整的 SQLite 数据库。通过这种方式,它不像许多其他 ADO.NET 提供程序那样只提供到实际数据库(例如 SQL Server)的接口。
      【解决方案5】:

      xml 或二进制文件都是我的建议

      【讨论】:

        猜你喜欢
        • 2014-07-04
        • 1970-01-01
        • 2015-06-06
        • 2012-02-14
        • 2019-11-03
        • 2013-11-16
        • 2012-03-09
        • 1970-01-01
        • 2021-09-08
        相关资源
        最近更新 更多