【问题标题】:Database engine for a desktop application in C#C# 桌面应用程序的数据库引擎
【发布时间】:2010-11-28 03:23:49
【问题描述】:

我需要一个用于桌面应用程序的轻量级数据库引擎。该应用程序不是以数据为中心的,尽管它需要一些持久性数据。你会使用 MS SQL Server express edition 还是 SQLite 哪一个?

编辑

SQL Server Compact 版是免费的吗?如果是这样的话,SQLite 与 SQL Server Compact 版本如何开发这种应用程序?

【问题讨论】:

  • 是的,SQL Server Compact 版本是“免费的”(参见我之前发布的链接)。

标签: c# database desktop-application


【解决方案1】:

绝对不是 Sql Server Express。那是一个服务器类引擎。您需要一个进程内引擎。在这方面,SQLite 很好。 Sql Server Compact 版也是如此。两者都是免费的,任何一个都应该足以满足您的需求。

【讨论】:

  • 使用 clickonce 时,Sql Server compact 也很容易部署。
  • 虽然我同意它不是特别轻量级,但有许多桌面应用程序确实使用它。例如行动!,微软会计。
  • SQLite 的 +1 !作为奖励,有一个一流的开源 ADO.NET 提供程序sqlite.phxsoftware.com,支持实体框架
  • 我使用 SqlCe 效果很好。
  • 有一个非常相似的要求。问题在于 .net4 的 System.Data.Sqlite 提供程序非常不稳定。这可能会将我转移到 SqlCE
【解决方案2】:

如果您使用 C# 和 Visual Studio,只需右键单击您的项目并选择“添加项目...”,然后在对话框中选择“本地数据库”,这将创建一个 SQL CE(精简版)数据库。就表、数据类型、视图而言,它具有 SQL Express/Server 的大部分功能,但不允许存储过程。它还适用于 Linq-to-SQL,因此可以轻松集成。

【讨论】:

    【解决方案3】:

    使用 SQL Server Compact - 您可以通过这种方式使用 LINQ,这本身就是值得的。

    虽然 SQLite 是一个选项,但您需要获得一个 ORM 层,与 SQL Server 相比,性能提升将是最小的/不存在。

    【讨论】:

    • SqlCe 非常好。我用那个小数据库做了一些了不起的事情。
    【解决方案4】:

    Firebird是知名数据库,支持latest Microsoft framework

    【讨论】:

      【解决方案5】:

      SQLite,尤其是单用户时。一个数据文件和一个DLL。

      【讨论】:

        【解决方案6】:

        如果它是单用户系统,您想查看 MS SQL Server 精简版而不是 Express(请参阅此处:http://www.microsoft.com/sqlserver/2008/en/us/compact.aspx

        Compact Edition 是一个类似于 SQLite 的可嵌入数据库。

        很遗憾,我无法提出任何建议。

        【讨论】:

        • SqlCe 很容易部署。
        【解决方案7】:

        【讨论】:

          【解决方案8】:

          有些人喜欢 .NET 嵌入式数据库世界中的后起之秀之一 -- VistaDb。该许可证比 Sql Server Compact 限制性更强(仅对单个开发人员免费),但它是一个 100% 托管的数据库,具有 xcopy 部署并具有 VS 工具集成。

          【讨论】:

          • 但这不是免费软件,是吗?
          • 他从来没有说过它必须是免费的......而且 VistaDB 是一个很好的选择,让您可以在桌面上运行,然后使用相同的代码扩展到 SQL Server。它具有 T-SQL Procs 和 SQL CE 所缺少的其他东西。
          【解决方案9】:

          请注意,如果您将 SQL CE 与 EF 一起使用,则必须生成自己的 id 键,因为 SQL CE 不支持多查询。

          即: 插入 -> 选择实体的键 -> 不好

          生成和 id 键(GUID 或其他)将其添加到您的实体,然后插入 -> 好

          【讨论】:

          • 你能再解释一下这个问题吗?
          • 首先对英语感到抱歉。我的意思是,如果您使用带有 EF 的 SQL Server(不是 CE)并且您要插入一个新实体,则会发生 2 个“操作”:1-插入您的实体 2-id(如果是当然是自动增量)将分配给您的实体。使用 SQL CE 这是不可能的,ID 的分配将导致错误,因此您必须在插入之前生成 GUID
          【解决方案10】:

          Defo SQL lite,虽然它有一些你应该注意的限制/功能

          【讨论】:

            【解决方案11】:

            如果您需要以数据为中心,那么您真正需要的是文件,如果您需要事务 (ACID),那么您需要的是 (rdbms) 数据库。

            否则在扩大规模时会遇到问题。

            【讨论】:

              【解决方案12】:

              如果不是很多数据,并且您不需要运行复杂的查询(虽然 LINQ 可以),为什么不使用 XML 数据集?这样它就独立于平台(可以在带有 Mono 的 Linux 上运行)并且不需要用户安装额外的资源占用软件。

              我将 XML 数据集广泛用于需要对少量信息进行持久数据存储的应用程序。如果只有几个变量,您也可以使用设置文件,它会根据您的选择按应用程序或按用户存储。

              【讨论】:

              • 感谢您的意见。但是,即使应用程序不是以数据为中心的,它必须保留的信息也包含一些活动记录。使用数据库更方便。
              【解决方案13】:

              考虑一下最终用户的开销...SQL Server Express 仍然占用资源,在重新启动时启动需要时间等等。对于少量的单用户持久数据,我会使用 SQLite。除非你正在做严肃的绑定等等,否则你和它之间不需要 ORM。

              【讨论】:

                猜你喜欢
                • 2015-03-03
                • 1970-01-01
                • 2012-04-21
                • 1970-01-01
                • 2020-12-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多