用于.net的嵌入式数据库,可以运行网络

我是(现在仍然在)寻找一个嵌入式数据库,用于.net(c#)应用程序。警告:应用程序(或至少数据库)存储在网络驱动器上,但一次只能由1个用户使用。

现在,我的第一个想法是 SQL Server Compact Edition 。这是非常好的集成,但它不能运行网络。

Firebird seems to have the same issue, but the .net Integration seems to be not really first-class and is largely undocumented.

Blackfish SQL looks interesting, but there is no trial of the .net Version. Pricing is also OK.

对于.net 可以正常运行的任何其他建议都会在网络中运行,而无需实际安装服务器软件?

0
额外 编辑
意见: 1
有趣的是,这篇文章不被认为是“基于意见”,与我的文章相反 stackoverflow.com/questions/20229964/… 。无论如何 - 我认为所有提议的嵌入式数据库都适用于服务器上的一个用户(包括SQL CE),其中一些允许并发读取(如SQLite),但只有一个(至少是我发现并测试过的唯一一个) !)允许并发写入是VistaDB
额外 作者 Prokurors,

9 答案

查看 VistaDB 。他们有一个非常好的产品,服务器版本(3.4)处于测试阶段,并且即将发布。

0
额外

还有 Valentina 。当我在制作一些Real Basic项目时,我会在这个产品中找到它。 RB版本非常好。

0
额外

这听起来像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方法与数据库进行交互。

0
额外

您可以使用嵌入式firebird,它只是一个dll,您将需要与您的应用程序一起发货。

关于没有记录的东西,这不是真的,firebird .NET驱动程序实现ADO接口,所以如果你知道ADO,你可以使用Firebird,基本上而不是SQLConnection,你将使用FBConnection等等,但我的建议是编写一个数据访问层,并在你的代码中只使用接口,如下所示:

using FirebirdSql.Data.FirebirdClient;

public static IDbConnection MyConnection()
{
    FbConnection cn = new FbConnection("...");
    return cn;
}

这个例子非常简单,但你不需要太多。

我们在所有的应用程序中使用firebird而没有任何问题,您至少应该尝试一下。

0
额外

我很困惑。

你要求一个嵌入式数据库 - 数据库本身存储在服务器上。这意味着将数据文件存储在网络共享上。然后你会说SQL精简版不起作用,除非如果你看一下这个文档:

Word Document:
Choosing Between SQL Server 2005 Compact Edition and SQL Server 2005 Express Edition

在第8页上,“网络共享上的数据文件存储”旁边有一个很棒的绿色勾号。

所以在我看来,你的第一个想法是正确的。

0
额外
这很有趣,因为SQL Server专门告诉我它不会: img512.imageshack.us/ img512 / 6082 / sqlceerror.jpg - 也许这是一个误解,因为创建似乎是不可能的,而访问可以工作。但是,就我的目的而言,在Application Launch上创建数据库至关重要。
额外 作者 Michael Stum,
在几乎所有情况下,现实都会胜过文档 - 然后就会出现文档为什么会说“错误”的事情(或者至少是如何出现这种差异)的问题。 [FX:浏览,浏览] MSDN中的信息很薄弱
额外 作者 Murph,
Jason不想粗鲁,大约一半的评论是错误的,因为我们不是在讨论任何时候的多用户服务器版本,只是基本上是.DLL的紧凑版本(与Express或其他“服务器不同“版本)。
额外 作者 Murph,
您可以将数据库存储在网络存储上的SQL Server中,但只有一个SQL Server可以访问它。然后,您将以比污垢慢的连接模式运行。只因为你可以不意味着你应该。他询问每个应用程序直接访问数据库,而不是通过服务器应用程序。
额外 作者 Jason Short,

你有没有考虑过OODB?从各种开源替代方案中,我推荐 db4o (对于自我推荐:)),它可以嵌入或运行在客户端/服务器模式下。

最好

阿德里亚诺

0
额外

SQLite came to my mind while reading your question, and I'm quite sure that it's possible to access it from a network drive if you keep yourself to the constraint of 1 user at a time.

.NET上的SQLite - 获取在3分钟内启动并运行

0
额外
我在过去的几个星期测试过它,而SQLite确实是一个很棒的产品。它当然不是一个完整的关系型RDBMS,但它具有完成工作所需的所有功能。
额外 作者 Michael Stum,
@ChrisHanson它只允许多个用户同时读取访问权限
额外 作者 Prokurors,
@Sven:SQLite实际上具有相当全面的文件锁定功能,并且SQLite数据库绝对可以一次被多个用户访问。在支持它的文件系统上,SQLite甚至会使用字节范围而不是全文件锁定来提高多个同时使用同一个数据库的性能。这不是访问;它非常强大。
额外 作者 Chris Hanson,

我推荐Advantage Database Server(www.advantagedatabase.com)。这是一个成熟的嵌入式数据库,拥有很好的支持,并且可以从.NET以外的许多开发语言访问。 “本地”版本是免费的,以DLL的形式在您的应用程序中运行,不需要在服务器/网络共享上安装,并且支持所有主要的数据库功能。您可以将全部数据库和/或应用程序文件存储在网络上;它并不关心数据在哪里。

Disclaimer: I am an engineer in the ADS R&D group. I promise, it rocks :)

0
额外

有点迟到这里的帖子..和 VistaDB 已经提到,但我想指出,VistaDB是100%管理(因为你的帖子被标记为.net)。它可以从共享网络驱动器运行,并且部署了1MB xcopy。

既然你提到了SQL CE,我们也支持T-SQL语法和数据类型(事实上不止SQL CE),并且在SQL CE中有可更新的视图,TSQL Procs和其他东西。

0
额外
关于Vista的另一件好事(与其他人相比)是它支持位于网络位置的数据库文件的并发写入 - 对我而言,它是决策功能
额外 作者 Prokurors,