WinForms - 最简单的持久化数据方法是什么?

8

我正在构建我的第一个WinForms应用程序。

问题 - 在应用程序使用期间(例如,在此情况下,包含状态和日期/时间的URL列表)保存一些数据的最简单/最佳方法是什么? 我不认为需要数据库。

例如 * 只需将其存储到文本文件中是否最简单? * 或者在DotNet中将其存储到XML文件中同样容易吗? * Windows注册表如何? 这是通常要避免的东西吗? 它的使用是否与所有版本(包括Windows 7)兼容? * 数据库-可能在这里过度。 * 一个广泛使用的库呢?

谢谢

6个回答

9
请查看项目的“设置”(在“解决方案资源管理器”中右键单击项目 > 属性 > “设置”选项卡),您可以定义一些变量,这些变量将在每个用户使用程序时持久化,例如用户名、最后更新时间、代理服务器等。这些设置本身被序列化为 XML 并存储在每个用户的“应用程序设置”文件夹中,但您也可以指定默认设置或应用程序特定设置。
然后您可以像这样使用这些设置:
MyNamespace.Properties.Settings.Default.MySetting

有关设置文件的更多信息,请查看@ MSDNCode Project

如果您只需要在会话之间存储少量变量,那么这非常好。如果您需要存储大量数据,请查看其他答案中建议的数据库选项之一,或者序列化


5
如果您需要大量的持久性存储并且超出了应用程序存储,您可以使用SQLite或SQL Server Compact(两者都是独立的)。但在您的情况下,我认为读/写位于公共应用程序数据文件夹中的XML文件就足够了,而且非常容易。

4
在.NET中,将数据存储到XML非常容易,特别是如果你只需要存储一个URL和时间戳。你可以创建一个自定义类来保存这些数据...在应用程序中运行时,操作该类的实例。
当需要保存数据时,将对象序列化为XML...当应用程序需要恢复数据时,只需反序列化即可。MSDN有一个简单的walkthrough
值得注意的是,正如Quintin所说,使用SQL Server Compact或其他轻量级数据库也是一个不错的选择。XML快速简便,但如果你需要共享数据或需要比简单序列化更灵活的功能,最好使用数据库。

顺便问一下 - SQL Server Compact 是否需要用户单独安装?还是你可以将它的部署作为应用程序click-once部署的无缝包装? - Greg

0

0

因为我的第一篇文章很难懂,所以我进行了编辑

个人而言,如果用户共享数据,我喜欢将数据存储在数据库中。

对于非共享的单用户数据,以下选项都相当容易。

如果您的数据在内部存储在 DataSet 中,我建议使用 DataSet.WriteXml 和 DataSet.ReadXml 进行本地存储。

否则,对于像您提出的这样简单的东西,纯文本文件是最简单的选择。但是,如果数据将更加复杂,则编写 Xml 文档最合适。

您还可以研究序列化:

http://msdn.microsoft.com/en-us/library/7ay27kt9(VS.85).aspx


0

你应该看看db4o。这是一个轻量级的开源对象数据库,适用于.NET和Java对象,非常适合简单持久化。它比文本文件更易查询,比关系型数据库更轻量级。它作为库包含在内,并持久化到文件中,因此没有进程外调用。

通过引用db4o库(下载此处),可以将其添加到项目中。您只需给它一个要持久化对象的文件路径,它就会处理剩下的事情。然后,您可以创建类来封装信息,并通过db4o将它们的实例简单地持久化到文件中。您可以通过一个非常简单的查询接口稍后请求它们。


非常感谢。Db4o是其类别中最广泛/流行的选择吗? - Greg
如果您所说的类别是指C#/Java对象数据库,那么是的,我相信是这样。然而,如果您指的是从一个会话到另一个会话存储小原始数据,那么使用Settings、自定义ConfigurationSection或另一个XML文件是最常用的。如果您发现需要更多数据库功能,但不想管理关系型数据库管理系统,则值得考虑对象数据库。 - Travis Heseman
db4o似乎需要许可证才能用于商业目的,是吗?该网站似乎建议您询问报价(未提及具体数字)... - Greg
db4o对于特定商业用途需要许可证。但是,可以在GNU GPL第2版下获得免费许可证并使用。您需要考虑您的目的,并查看您的使用是否符合该许可协议。http://www.db4o.com/about/company/legalpolicies/gpl.aspx - Travis Heseman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接