如果我不打算将数据保存到SQL数据库中,我应该在哪里保存它?

时间:2009-12-19 02:47:11

标签: c# storing-information

我正在制作类似于魔兽世界RAWR的百科全书计划。我不打算将数据保存在SQL数据库中,但是当我确信这些较轻的用例有替代品时,我已经很难做到这一点。

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

我应该在哪里保存这些东西?通过保存我的意思是,在我发布程序时将它们存储起来进行部署。

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

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

好的旧文件系统出了什么问题?

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

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

我自己使用了SQLite并且喜欢它,但即使它可能对你的需求有点过分,因为你没有说你需要执行许多查询操作。

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

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

部署就像将所有必需的资源文件放在子文件夹中,然后将子文件夹放在应用程序文件夹中一样简单。

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

答案 2 :(得分:2)

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

话虽这么说,数据库通常会让您的生活更轻松,特别是如果您获得关系映射工具或对象数据库的良好对象。我建议您考虑使用SubSonic SimpleRepository之类的内容将数据放入SQLite database。或者,更好的是,看看使用pure object database like DB4O

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

我确信在从.NET使用Excel时还有其他一些小问题可以解决,但我只在现实世界中完成了两次(尽管两次都涉及大量数据)。我绝对不会推荐它用于企业环境。

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