6

我有一个 C# 应用程序,它允许一个用户输入有关客户和工作地点的信息。信息非常基础。

  • 客户:姓名、号码、地址、电子邮件、相关工作地点。
  • 工作地点:名称、地点。

这是我需要的这个程序的规格。

  • 输入的数据量没有限制。
  • 每个应用程序单个用户。没有并发活动或多个用户。
  • 允许将用户条目/数据导出到可以在应用程序/用户之间轻松共享的外部文件。
  • 允许用户查询根据客户信息/工作地点信息的不同组合显示客户。
  • 永远不会在应用程序之外查看或操作数据。
  • 该程序几乎总是运行,最小化到任务栏。
  • 启动时间不是很重要,但是我希望查询速度相当快。

这一切似乎都将我指向一个数据库,但它是一个非常轻量级的数据库。但是,我也需要它在数据存储方面没有限制。如果您同意我应该使用数据库,请告诉我什么最适合我的需要。如果您认为我不应该使用数据库,请就您认为最好的方法提出一些其他建议。

4

6 回答 6

4

我的建议是使用 SQLite。你可以在这里找到它:http: //sqlite.org/。您可以在这里找到 C# 包装器版本:http: //sqlite.phxsoftware.com/

SQLite 非常轻量级,并且为这种轻量级引擎提供了一些非常强大的功能。您可以查看的另一个选项是 Microsoft Access。

于 2010-08-18T17:17:02.427 回答
4

你又问错问题了:)

更好的问题是“我如何构建一个可以让我更改数据存储实现的应用程序?”

如果您应用存储库模式并正确连接它,您可以构建可互换的持久层。因此,您可以从一种实现开始并根据需要对其进行更改,而无需重新设计业务或应用程序层。


一旦你有了一个存储库接口,你就可以尝试用很多不同的方法来实现:

平面文件- 您可以将数据保存为 XML,并假设它不是很多数据,您可以将全部内容存储在内存中(只需在启动时读取文件,在关闭时写入文件)。使用内存中的 XML,您可以获得非常高的吞吐量,而无需担心数据库索引等。

Distributable DB - SQLite 或 SQL Compact 工作得很好;它们提供了许多 DB 优势,并且无需安装

Local DB - SQL Express 是轻量级和全功能 DB 之间的一个很好的中间地带。小心使用时,访问就足够了。主要的好处是它包含在 MS Office 中(尽管默认情况下没有安装),并且一些 IT 团队更愿意将 Access 安装在机器上而不是 SQL Express。

完整数据库- MySql、SQL Server、PostGreSQL 等。


鉴于您的具体要求,我建议您使用基于 XML 的平面文件——唯一的条件是您可以接受与文件大小直接相关的应用程序的内存使用情况(因为您的数据是文本,即使加上 XML 的重量,这将需要很多条目才能变得非常大)。

以下是根据您的要求列出的优点/缺点:

缺点

  • 输入的数据量没有限制。
    • 使用内存中的 XML 意味着您的应用程序无法扩展。它可以轻松处理 10MB 的数据文件,100MB 应该不是问题(除非您的系统内存不足),除此之外,您必须认真质疑“我能负担得起这么多内存吗?”。

优点

  • 每个应用程序单个用户。没有并发活动或多个用户。
    • XML 可以读入内存并由进程(实际上是 AppDomain)保存。它非常适合并发性非常狭窄的单用户场景。
  • 允许将用户条目/数据导出到可以在应用程序/用户之间轻松共享的外部文件。
    • XML 非常适合导出,也很容易导入到 Excel、数据库等...
  • 允许用户查询根据客户信息/工作地点信息的不同组合显示客户。
    • Linq-to-XML 是你的朋友 :D
  • 永远不会在应用程序之外查看或操作数据。
    • ....然后将其完全保存在内存中不会导致任何问题
  • 该程序几乎总是运行,最小化到任务栏。
    • 所以在启动时加载 XML,在关机时写入是可以接受的(如果文件非常大,可能需要一段时间)
  • 启动时间不是很重要,但是我希望查询速度相当快
    • 启动时读取 XML 会比较慢;但是当它加载到内存中时,它将很难被击败。任何给定的数据库都需要启动数据库引擎,进行互操作/跨进程/跨网络调用,从磁盘加载结果(如果引擎没有缓存)等等......
于 2010-08-18T17:21:33.387 回答
3

SQLite 怎么样? 听起来它非常适合您的应用程序。

您可以使用System.Data.SQLite作为 .NET 包装器。

于 2010-08-18T17:15:39.363 回答
3

在我看来,数据库是你需要的 100%。它提供数据存储、数据检索(包括查询)和将数据导出为标准格式(直接从数据库或通过您的应用程序)的能力。

对于轻量级数据库,我建议使用SQLite(发音为 'SQL Lite' ;))。您可以在谷歌上搜索有关如何设置它的教程,以及如何通过您的 C# 代码与其交互。我还找到了对 SQLite 的这个C# 包装器的引用,它可能可以为您完成大部分工作!

于 2010-08-18T17:18:14.903 回答
0

您可以免费获得 SQL Server Express。我想说的问题不是你为什么要使用数据库,而是你为什么不应该呢?这类问题正是数据库所要解决的问题,而 SQL Server 是一个非常强大且广泛使用的数据库,因此如果您要寻求其他解决方案,您需要提供一个很好的理由说明您为什么不使用数据库.

于 2010-08-18T17:20:47.870 回答
0

数据库将是一个很好的选择。 SQLite就像其他人提到的那样好。

您还可以使用SQL Server Express的本地实例来利用与 Microsoft 开发堆栈的其他部分的改进集成(因为您提到了 C#)。

第三种选择是像Raven这样的文档数据库,它可能适合您的数据声音。

编辑第四个选项是在几天后发布测试版时
尝试Lightswitch 。(8-23-2010)
/edit

数据存储(硬盘的空白空间)总会受到限制。根据维基百科,SQL Server Express 2008 R2 的 SQL Express 限制为 10 GB

于 2010-08-18T17:24:34.990 回答