C#桌面应用程序最佳数据库是什么?(无网络)

13

我应该使用什么?我需要存储数据,只需要在本地计算机上存储。我将存储所有字符串变量,并且有多列。

最好选用什么?甚至需要使用数据库吗?

9个回答

13

我建议使用db4o,这是一个对象数据库引擎。它非常直接简单,客户端不需要安装服务器或其他软件。另外一种选择是SQLite。您可以在这里获取.NET提供程序。

编辑

在此处查看db4o教程here


+1 感谢指出 db4o。与其他数据库相比,它更简单、自然,因为您不需要处理连接和其他相关事项(只需处理对象)。 - user135323
这完全是用C#完成的吗? - Bloodyaugust
@Bloodyaugust - 是的,你可以在https://source.db4o.com/db4o/trunk/db4o.net/检查源代码。 - Fernando

6

SQL Server Compact 3.5 SP1不需要安装(您只需要提供.dll文件,但请查看最终用户许可协议是否允许),使用方法也相对简单。


5
我建议使用sqlite,它是一个非常快速的文件型、可嵌入的、功能丰富的数据库。我有一个C#绑定的轻量级ORM,可以抽象和简化对它的访问。这里有一个使用sqlite的在线Web服务演示
哦,db4o也是一个不错的选择,我也有C#数据库绑定支持C#自动属性(默认的db4o提供程序不支持)和其他常见数据访问场景。

3

如果你正在寻找一个关系数据库管理系统(RDBMS),那么你应该看一下SQLite;如果你要存储对象或类似的数据,可以考虑MongoDB。


2

我强烈建议您查看序列化框架。它的性能远不及数据库,但是,如果您不需要处理大量数据,那么它的开销要少100%左右。在 .NET 中将对象序列化到文件中非常简单:

XmlSerializer serializer = new XmlSerializer(typeof(myObjectType));

using(FileStream stream = new FileStream("file", FileMode.Create, FileAccess.Write)
{
   serializer.Serialize(stream, myObject);        
}

就是这样!

回读操作基本上是相反的。LINQ提供了更多的选择。再次强调,与数据库的性能相比还远远不够,但我已经看到许多实现,在存储的数据量方面,使用一个数据库远远超出了需要。显然,如果您有明确的扩展需求等,您需要进行规划。合适的工具解决合适的问题,这都是很重要的。


你认为一个包含200个对象,每个对象有10个属性的序列化器是合理的吗? - Bloodyaugust
再次强调,这取决于你要做什么,但我认为它是合理的。好处是(根据您可以承受的“破坏性”变化),您始终可以切换到二进制序列化程序,它也有优缺点。二进制序列化程序的优点几乎完全与性能相关,而缺点更多地与类型相关。我知道有人谴责XmlSerializer,但如果可以承担,我倾向于使用它,因为通常长期运行中会遇到较少的问题。另一件事-考虑使用属性而不是元素! - Jeff

2
为什么不考虑使用SQL Server Express呢?它甚至是免费的。

2
@Downvoter:有什么问题吗?SQL Server Express不需要,甚至不使用网络。 - John Saunders
我没有给你点踩,但是有更简单的选项,不需要下载84MB-500MB的大文件和占用大量空间。它提供了更强大的选项,但这个人只想持久化一堆字符串。 - Chris Conway
我误操作给你的回答点了个踩,现在已经取消了。 - Matthew Flaschen
@Chris:记录一下,84MB只是数据库大小,172MB是管理工具大小,225MB是数据库和管理工具的总大小,而515MB则包括所有内容以及高级服务(全文搜索、报告服务)。此外,他谈到了字符串,但实际上是“一堆列”。 - John Saunders
1
@John:没错,84MB是仅数据库的大小,但与500K和零安装的SQLite相比,您会看到巨大的差异。部署也变得非常容易,因为它只需要复制和粘贴即可。对于一堆列,SQLite可以处理单个表中多达32767列。 - Chris Conway
@Chris:我并没有说SQLite不好。我对它不了解。我只是说SQL Server Express是一个免费的解决方案。而且,小尺寸并不代表一切。 - John Saunders

0

如果你只是想在一个相当简单的结构中存储少量数据,并且不需要进行任何复杂的查询,那么可以考虑使用 XML 文件。你不需要任何额外的软件,并且可以使用 LINQ to XML 轻松地处理它。


0

XML 可以替代您的需求!


0

如果你想要极快的速度,可以看看memcache。但是它们不会写入硬盘,所以如果你想要在会话之间存储数据,可能还需要其他提到的数据库。

在我的项目中,我们使用mongodb缓冲数据,并使用memcache缓冲mongo。因此,首先从memcache检索数据,如果没有找到,则尝试mongo。如果仍然找不到,我们就获取新数据。

对于Windows和.NET,请查看这里


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