可脱离网络运行的 .net 嵌入式数据库
Posted
技术标签:
【中文标题】可脱离网络运行的 .net 嵌入式数据库【英文标题】:Embedded Database for .net that can run off a network 【发布时间】:2010-09-05 06:26:43 【问题描述】:我一直在(现在仍然)在寻找要在 .net (c#) 应用程序中使用的嵌入式数据库。警告:应用程序(或至少是数据库)存储在网络驱动器上,但一次只能由 1 个用户使用。
现在,我的第一个想法是SQL Server Compact edition。集成得非常好,但不能脱离网络运行。
Firebird 似乎也有同样的问题,但 .net 集成似乎并不是真正一流的,而且基本上没有记录。
Blackfish SQL 看起来很有趣,但没有 .net 版本的试用版。定价也还可以。
关于与 .net 运行良好且无需实际安装服务器软件即可在网络上运行的任何其他建议?
【问题讨论】:
有趣的是,与我的帖子 ***.com/questions/20229964/… 相比,这篇帖子不被认为是“基于意见的”。无论如何 - 我认为所有提议的嵌入式数据库都适用于服务器上的一个用户(包括 SQL CE),其中一些允许并发读取(如 SQLite),但只有一个(至少是我发现并测试过的唯一一个它可以工作) !) 允许并发写入的是 VistaDB 【参考方案1】:SQLite 在阅读您的问题时出现在我的脑海中,我很确定可以从网络驱动器访问它如果您将自己限制在 1 个用户时间。
SQLite on .NET - Get up and running in 3 minutes
【讨论】:
@Sven:SQLite其实有比较全面的文件锁定功能,一个SQLite数据库绝对可以同时被多个用户访问。在支持它的文件系统上,SQLite 甚至会使用字节范围而不是整个文件锁定来提高多个同时使用同一数据库的性能。这不是访问;它非常强大。 在过去的几周里我已经对其进行了测试,SQLite 确实是一个很棒的产品。当然,它不是一个完整的 RDBMS,但它具有完成工作所需的所有功能。 @ChrisHanson 它只允许多个用户同时读取访问权限【参考方案2】:我推荐 Advantage 数据库服务器 (www.advantagedatabase.com)。它是一个成熟的嵌入式数据库,具有强大的支持,并且除了 .NET 之外还可以从许多开发语言中访问。 “本地”版本是免费的,以 DLL 的形式在您的应用程序中运行,不需要在服务器/网络共享上安装,并且支持所有主要的数据库功能。您可以将数据库和/或应用程序文件全部存储在网络上;它不关心数据在哪里。
免责声明:我是 ADS 研发团队的工程师。我保证,它摇滚:)
【讨论】:
【参考方案3】:听起来 ADO/Access 非常适合您的需求。它已融入 MS 堆栈、经验丰富且多用户。
您可以像这样以编程方式创建数据库:
Dim catalog as New ADOX.Catalog
Catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\server\path\to\db.mdb")
然后您可以使用标准 ADO.NET 方法与数据库进行交互。
【讨论】:
【参考方案4】:您可以使用嵌入的 firebird,它只是一个 dll,您需要随应用一起提供。
关于未记录的事情,这不是真的,firebird .NET 驱动程序实现了 ADO 接口,所以如果你知道 ADO,你可以使用 Firebird,基本上你将使用 FBConnection 等代替 SQLConnection,但我的建议是编写数据访问层并在代码上仅使用接口,如下所示:
using FirebirdSql.Data.FirebirdClient;
public static IDbConnection MyConnection()
FbConnection cn = new FbConnection("...");
return cn;
这个例子很简单,但你不需要更多。
我们在所有应用程序中都使用 firebird,没有任何问题,您至少应该尝试一下。
【讨论】:
【参考方案5】:查看VistaDB。他们有一个非常好的产品,服务器版本 (3.4) 处于 Beta 阶段,即将发布。
【讨论】:
【参考方案6】:这里的帖子有点晚了。VistaDB 已经被提及,但我想指出 VistaDB 是 100% 托管的(因为您的帖子被标记为 .net)。它可以从共享网络驱动器运行,并且部署了 1MB xcopy。
既然你提到了 SQL CE,我们也支持 T-SQL 语法和数据类型(实际上比 SQL CE 更多),并且有可更新的视图、TSQL Procs 和 SQL CE 中缺少的其他东西。
【讨论】:
Vista 的另一个优点(与其他相比)是它支持对位于网络位置的数据库文件的并发写入 - 对我来说这是决策功能【参考方案7】:为什么不使用SQL Server 2005 Express edition?
这实际上取决于您所说的“嵌入式”是什么意思 - 但您可以将 SQLServer2005E 与您的应用程序一起重新分发,而用户永远不必知道它的存在。
Embedding SQL Server Express in Applications
Embedding SQL Server Express into Custom Applications
【讨论】:
@CodingTheWheel:因为它需要安装在服务器上,并且用户会注意到后台运行的服务,最迟在每个网络安全工具的警钟响起时。嵌入式意味着它是应用程序的一部分或单独的 .dll,但它不需要任何安装,不会尝试在注册表中执行任何操作,并且在删除它时不会留下任何文件,但数据库除外。 SQL Server Express 不是嵌入式的,Microsoft 使用“嵌入”作为“与您的应用程序一起打包,但仍然是具有依赖关系的独立事物”。你有很多【参考方案8】:我很困惑。
您要求的是嵌入式数据库 - 数据库本身存储在服务器上。这意味着将数据文件存储在网络共享上。然后您说 SQL Compact Edition 将无法工作...除非您查看此文档:
Word 文档:Choosing Between SQL Server 2005 Compact Edition and SQL Server 2005 Express Edition
在第 8 页,“网络共享上的数据文件存储”旁边有一个漂亮的绿色大勾号。
所以在我看来,您的第一个想法是正确的。
【讨论】:
这很有趣,因为 SQL Server 明确告诉我它不会:img512.imageshack.us/img512/6082/sqlceerror.jpg - 也许这是一个误解,因为创建似乎是不可能的,而访问可以工作。但是,就我的目的而言,在应用程序启动时创建数据库至关重要。 在几乎所有情况下,现实都胜过文档——然后就出现了为什么文档说“错误”的事情(或者至少是如何出现差异)的问题。 [FX:Browse, Browse] MSDN 中的信息相当稀少 您可以将数据库存储在网络存储上的 SQL Server 中,但只有 1 个 SQL Server 可以访问它。然后您以比污垢慢的附加模式运行。仅仅因为你可以并不意味着你应该。他询问的是每个应用程序都直接访问数据库,而不是通过服务器应用程序。 Jason,不想粗鲁,大约一半的评论是错误的,因为我们在任何时候都不是在谈论多用户服务器版本,只是基本上是 .DLL 的紧凑版本(与 Express 或其他“服务器”版本不同)。【参考方案9】:还有Valentina。当我在做一些 Real Basic 项目时,我偶然发现了这个产品。 RB版很不错。
【讨论】:
【参考方案10】:您是否考虑过 OODB?从各种开源替代方案中,我推荐db4o(对于自我推销感到抱歉:)),它可以在嵌入式或客户端/服务器模式下运行。
最好的
阿德里亚诺
【讨论】:
【参考方案11】:这个问题现在很古老,而且发生了很多变化。对于我的特定目的,LiteDB 是首选选项。它是开源的,有一个GitHub Repository。
除此之外,SQLite 基本上是嵌入式数据库的行业标准。有人尝试将代码移植到 .NET,但主要用例涉及本机库(例如 sqlite Nuget package)和/或 .NET P/Invoke 包装器,如 Microsoft.Data.SQLite。
【讨论】:
以上是关于可脱离网络运行的 .net 嵌入式数据库的主要内容,如果未能解决你的问题,请参考以下文章