我该如何将MySQL数据库服务器嵌入C#应用程序中?

3

可能重复:
自包含数据库?

我希望创建一个嵌入MySQL数据库服务器的C#应用程序。 数据需要存储在文件中,我需要在应用程序内访问它,进行查询并将结果保存回磁盘。

我该如何处理?


3
MySQL是必须的吗?如果你只需要一个数据库,SQLite是内置数据库的完美替代选择。 - Cᴏʀʏ
@NewProger:如果您希望可以回滚编辑;进行编辑的用户会在您徽章下方的问题旁列出。 - Cᴏʀʏ
最好还是用 @Cory 推荐的方式,不过如果 SQLite 更方便的话我可以更改。 - NewProger
不幸的是,我从未见过或听说过有一个包装器可以使MySQL无服务器化。 - Cᴏʀʏ
@JoachimPileborg:OP希望将一个MySQL数据库(以及访问它所需的服务器)嵌入到他们的应用程序中。是的,有很多关于如何使用MySQL的资源,但几乎没有关于如何在应用程序中嵌入它的资源(这可能是不可能的)。 - Cᴏʀʏ
显示剩余8条评论
3个回答

5
  1. 对于您的情况,一个开源的 ADO.NET 提供程序SQLLite 是最好的选择。请参考:SQLLite
    • SQLite 数据库引擎是一个 ADO.NET 2.0/3.5 提供程序,全部混合为单个混合模式程序集。
    • System.Data.SQLite 是最初的SQLLite数据库引擎。
    • 它是自包含的、无服务器、零配置、事务 SQL 数据库引擎。
  2. 如果您已经安装了 MySql 数据库,则可以使用 MySql Connector 进行嵌入。有关详细信息,请参阅:使用 C# 和 .NET 连接到 MySQL 数据库

SQLite不是一个好的选择。这个数据库没有像“Alter Table”、“Drop Table”等多个命令。任何表中的更改都代表着太大的努力,因为你必须创建新表并删除旧表。 - Eduardo
1
此外,如果您正在使用任何类型的并发,您将会后悔这个决定。即使使用了WAL(预写式日志),当您不断收到“错误:数据库已锁定”的消息时,您仍然会发现它不足够可靠。 - Jeffrey Kevin Pry
是的,非常正确。我最近成为了“数据库已锁定”错误的受害者。经过了如此多的辛勤工作和数小时的编码,我不得不放弃SQLite作为我的C#窗体项目的后端。 - gomesh munda

3

有一个名为libmysqld的MySQL嵌入式库,但是相较于SQLite来说,这需要更多的工作才能运行。我不确定是否有本机C#绑定。它似乎并不被广泛使用。通常,“嵌入式” MySQL 是捆绑到服务器设备中的,而不是编译后分发给第三方的应用程序。

SQLite提供了大部分与MySQL提供的基本功能相同的特性,并且旨在对您的应用程序影响较小。在许多情况下,你会发现它几乎一样。


如果我理解正确,使用嵌入式MySQL需要商业许可证才能用于非GPL兼容软件。 - Grzegorz Gierlik
@GrzegorzGierlik 另一个原因是SQLite可能更好。它是公共领域,所以没有问题。 - tadman

0

您仍需要在运行应用程序的系统上安装MySQL。 MySQL不像SQLite,Firebird或Microsoft SQL Server CE一样是自包含的、独立的、无服务器的关系型数据库管理系统。 - Cᴏʀʏ
那就是问题所在...如果我需要访问服务器,那就很容易了。但我希望应用程序是自包含的,不需要外部服务器或其他东西。 - NewProger

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