一个小型.NET应用的好的数据库选择是什么?

189

我正在使用.NET的C#语言开发一个小应用程序,我想要一个不占用过多资源的小型轻量级数据库

请列举一些最为知名的轻量级数据库软件


1
linqdb - ren
11个回答

204

2016年6月14日 是的...仍在得到投票 :-/


2014年3月17日 我仍然收到此问题的投票,请注意这个答案最初的回答时间。尽管列出的三个项目仍然完全可行,但清单很可能会变得过时。还有其他未列出的数据库技术可用。


以下是一些可以立即识别并且免费的选项:

SQL Server Compact下载附带了您将需要在代码中引用的ADO.NET提供程序。 SQLite下载可能没有它,所以这里是一个链接:

http://sqlite.phxsoftware.com/

所有三个使用SQL,但可能有一些限制/怪癖。管理工具与紧凑型和LocalDB一起使用,而对于SQLite,您将需要另一个UI工具,例如SQLite管理员:

http://sqliteadmin.orbmu2k.de/

还有NoSQL选项,例如:

个人而言,我会避免使用MS Access,转向其他免费选项。你可以选择LocalDB、Compact或SQLite,它们都是小巧可爱的数据库,并且在很少的内存中运行相对较快-关于喜欢微软产品的宗教方面问题,这只是个人偏好 :-)

我在Windows Phone编程中使用Sterling,因为它构建于孤立存储之上。我只看过RavenDb的文章,但我可以告诉你,它是一个基于JSON的文档存储框架。

还有一些其他的嵌入式/本地数据库,有些是关系型的,有些是面向对象的(不要混淆SQLite、SQL Server Express LocalDB或SQL Server Compact Edition):

并非所有这些都是免费的,支持SQL/LINQ/进程内(In-proc)的支持在它们之间也有所不同。这个列表只是出于好奇而列举。

现在还有Karvonite,但是代码库链接已经失效了。当它重新上线时,我将考虑在WP7开发中使用它。


11
支持 SQL Server CE。与在应用程序旁边安装SQL服务器不同,您只需使用 SQL Server CE 的dll文件,并在应用程序的工作目录中拥有一个数据库文件。 简单易行。 - Phil
2
RavenDB确实是一个文档数据库,但它的API比简单的名称和值对更强大。问题在于,如果您正在寻找免费替代品,它对商业项目来说并不是免费的。 - JCallico
@Phil,那么存储过程和 SQL 函数呢?在 SQL Compact 版本中我们不能使用吗? - Neo
@AdamHouldsworth 你好!在以下场景中,哪个选项可行:1)它应该是一个文件(无需安装)2)它可以驻留在网络共享上3)可以同时由不同计算机的多个用户访问? - Prokurors
1
不要把一些难以阅读的过时信息放在你回答的顶部。更新或添加你的回答,包含当今可用的选项,并提供一些示例可能更容易些。 - James Shaw
显示剩余7条评论

60

我建议使用SQLite。我们在工作中开发的几乎所有应用程序都在使用它。

它小巧紧凑。它需要一个DLL文件放在应用程序目录中,但是您不必像访问或SQL Server那样安装其他软件。此外,正如danielkza所说,"SQLite是公共领域的,因此您根本不必担心许可问题"。这可能真的会产生很大的影响。

您可以使用System.Data.SQLitecsharp-sqlite以与SQL或OleDB相同的方法在C#应用程序中访问它。

您还需要一个应用程序来编辑/管理数据库。我认为最好的是SQLite Studio。这里还有一些:
SQLite Admin
SQLite 2009 Pro(页面底部)
更新-7/25/11-更多SQLite应用程序(此处有问题)

这里有更多关于SQLite的信息:
Wikipedia上的SQLite
使用SQLite的公司

自定义函数: 另外,如果您在查看SQLite核心函数时没有找到合适的函数,您可以创建自己的自定义函数。以下是一些示例:
来自SO
另一个例子

:创建和使用SQLite中的用户自定义函数。

9
一个补充:SQLite 是公共领域软件,所以你完全不用担心许可证问题。 - danielkza
@MikeWebb Sqlite能否在ClickOnce应用程序中工作,而无需安装任何其他服务或类似的东西?如果它位于网络共享上供多个并发用户使用,它是否能正常工作? - Prokurors
2
@Prokurors - SQLite所需的仅是与您在程序中使用的语言(C ++,C#等)相对应的DLL文件。没有其他服务或程序需要。此外,它应该可以在具有并发用户的网络上运行。我们在我工作的服务器上拥有一个正在运行的副本,它运行良好。您可以在此处了解更多关于并发性的信息:http://www.sqlite.org/lockingv3.html - Mike Webb

11

Firebird embedded 可以是一个不错的选择。

嵌入式版本是服务器的一种精简变体。它是一个完整功能的 Firebird 服务器,只需几个文件即可打包。由于无需安装服务器,因此非常易于部署。

有一些非常好的.net驱动程序。


8
如果您想使用官方的微软解决方案,则可以选择SQL Server Compact。这样做的好处是,如果需要,您可以使用SQL Server进行复制。
如果您想要一个非常简单、小巧且免费的解决方案,则可以选择SQLite。这是Android用于内部数据库的解决方案,因此得到了很好的支持,并且有非常好的.NET绑定可用。
SQLite的一个明显优势是它是跨平台的。因此,如果您想将应用程序移植到Mono.NET,则无需对数据库实现进行任何修改。
我不喜欢MS Access作为这个解决方案,但很多人都在他们的答案中包括它。由于专有格式和平台依赖性,它的功能受到限制。不过,它也有它的优点。如果您有MS Access的副本,可以轻松地操纵数据,可以图形化地构建查询并创建宏。您可以轻松地将其与MS Office的其他部分集成。
在所有这些选项中,我会推荐SQLite,因为它非常紧凑,文档齐全,而且得到了一个不断增长的开发者团队的支持,无论平台如何。
编辑:
我意识到还有另一种选项,每个人都忘记提到了。
只要您不需要关系表,就可以使用CSV文件通过ADO.NET作为数据集读取。(更多的是一个有趣的建议,但在某些情况下会很合适,并且不需要MS部署的附加库。)

8
如果你正在使用.NET 4.0.2或更高版本并需要嵌入式数据库支持,请考虑使用SQL Server Express LocalDB。它是Express系列的相对较新的成员,具有更小的安装占用空间和较少的管理开销(与其他版本的Express相比),但仍保留了SQL Server的可编程性方面。也就是说,与Compact Edition不同,LocalDB不需要安装单独的ADO.NET提供程序来与SQL通信。
请参阅以下网页以获取更多详细信息:
- SQL Express v LocalDB v SQL Compact Edition (MSDN Blogs) - SQL LocalDB vs SQL Server CE (Stack Overflow)

7

1
或者特别针对.NET,您可能想看看RavenDB - marc_s
Mongo虽然很好用,但它不能嵌入式运行 - 你必须启动一个单独的服务器进程,这可能对OP的目的来说有点过重。 - Mike Woodhouse
Mongodb不支持SQL。提问者想要“在哪里可以通过SQL查询保存和检索记录”。而且,Mongodb需要大量内存。我不建议在这种情况下使用它。 - Peter Long

4
您可以使用免费的Sql Server Express Edition,它非常强大,除非您需要像mirroring这样的功能。请参阅此链接

8
问题声明:“我不需要任何强大的东西”。SQL Server Express并不是SQL Server的轻量级版本。它是一个数据库大小有限制的版本,并且在启动用户PC时对服务的启动有很大影响。对于这个问题来说,使用它过于浪费资源。SQL Server Compact更加适合。 - Moog

2
我已经成功地使用了db4o。
它是基于文件的,社区庞大,使用简单。

http://www.db4o.com/

许可细节
自由通用公共许可证 db4o默认使用GPL许可证。
如果您计划在内部使用db4o或者计划开发和发布自己的衍生作品并同样以GPL的形式发布,那么GPL许可证是理想的选择。
商业许可证 如果您希望将db4o嵌入商业非GPL产品中,则需要商业许可证。商业许可证持有人可以获得高级服务和支持。

1
我在2012年使用了6个月的db4o。如果有某种方法可以避免在对象模型更改后无法访问旧数据的问题,我会点赞这个答案。据我所知,如果更改对象,则很难避免丢失旧数据。底线是始终在不同的非db4o格式中备份您的数据副本(这也是一个相当通用的规则)。 - Contango

2
一种未被提及的替代方案,如果您不需要免费数据库,可以考虑使用VistaDB。它是完全托管代码,为嵌入式数据库提供了大量功能,并提供相当不错的性能。它在SQL CE和SQL Server Express之间提供了一个相当不错的桥梁,因为大多数VistaDB存储过程在SQL Server Express中运行时无需修改。到目前为止,我对客户服务非常满意。我在工作中一直在使用它。没有需要启动的服务。空数据库大小约为1MB,DLL也非常轻巧。具有ADO.NET提供程序等功能。我非常喜欢它。

你好!它能在多用户场景下工作吗?例如,我可以将这个VistaDB存储在网络共享上,并允许多个用户同时访问它吗? - Prokurors
1
在这方面,它具有一些有限的功能。显然,它无法取代在该盒子上运行本地数据库引擎的真正数据库,但它确实提供了一些事务选项。我们计划在这种情况下使用它,因为它似乎比我们遇到的任何免费选项更好地处理它,并且我们的客户可能没有设置SQL服务器或其他的专业知识。它比SQLCE提供更多功能,但不如完整的SQL服务器那么强大。这是一款真正优质的软件。 - Rig
谢谢您提供的信息!他们即将推出的新版本5听起来非常有前途。您尝试过在VistaDB中使用实体框架吗?甚至使用EF Code First创建了VistaDB文件吗? - Prokurors
1
我做过,但那是大约3-4年前的事了。当时我发现它运行良好,那是我第一次使用EF。我认为现在它应该更好了。当时唯一不足的是文档的某些部分比较稀疏,但那是在被现在的所有者购买后进行转换期间出现的。 - Rig
1
PS:至少在我使用它的时候,他们非常乐意提供演示许可证供使用。我强烈建议您在承诺购买许可证费用之前先试用一下。 - Rig

1

SQL Server Compact Edition是最好的选择,因为它免费、体积小且集成性良好。


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