我有一个C#应用程序,该应用程序允许一个用户输入有关客户和工作网站的信息。该信息非常基本。

  • 客户:姓名,号码,地址,电子邮件,关联的工作网站。
  • 工作网站:名称,位置。

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

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

这一切似乎都将我指向数据库,但很轻巧。但是,就数据存储而言,我还需要它没有限制。如果您同意我应该使用数据库,请让我知道最适合我的需求的方法。如果您不认为我应该使用数据库,请就您认为最好的建议提出其他建议。

有帮助吗?

解决方案

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

对于轻型数据库,我建议 sqlite (发音为'sql lite';))。您可以用Google搜索有关如何设置它的教程,然后如何通过C#代码与它进行接口。我还发现了 c#sqlite包装器,它可以为您做很多工作!

其他提示

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

Sqlite非常轻巧,并且具有一些非常强大的功能,可用于这种轻巧的引擎。您可以研究的另一个选项是Microsoft访问。

您再次问一个错误的问题:)

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

如果应用存储库模式并正确接口,则可以构建可互换的持久性层。因此,您可以从一个实现开始,然后将其更改为需要重新设计业务或应用程序层的需要。


一旦拥有存储库接口,您就可以尝试以许多不同的方法来实现:

平面文件 - 您可以将数据坚持为XML,并且前提是您可以在内存中存储完整的内容(只需在启动时读取文件,请在关闭时写文件)即可。使用内存XML,您可以获得很高的吞吐量,而无需担心数据库索引等。

可分发DB -sqlite或sql compact效果很好;他们提供许多DB的好处,不需要安装

本地DB -SQL Express是轻巧和功能全功能的DB之间的良好中间地面。当仔细使用时,访问就足够了。主要好处是它包含在MS Office中(尽管默认未安装),并且某些IT组在机器上安装的访问量比SQL Express更舒适。

完整的DB -MySQL,SQL Server,Postgresql等。


鉴于您的特定要求,我会建议您使用基于XML的平面文件 - 唯一的条件是您可以与应用程序的内存使用直接与文件大小相关联(由于您的数据是文本,甚至是有了XML的重量,这将需要 很多 条目变得很大)。

这是您的要求的专业人士/选择:

缺点

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

优点

  • 每个应用程序单用户。没有并发活动或多个用户。
    • 可以将XML读取为内存并由该过程(实际上是AppDomain)保存。它非常适合单用户场景,在这种情况下,并发是一个非常狭窄的问题。
  • 允许将用户条目/数据导出到可以在应用程序/用户之间轻松共享的外部文件。
    • XML非常适合导出,并且易于导入以脱颖而出,数据库等...
  • 允许用户查询根据客户信息/工作网站信息的不同组合显示客户。
    • Linq-to-XML是您的朋友:D
  • 将永远不会在应用程序之外查看或操纵数据。
    • ....然后完全持有内存不会引起任何问题
  • 该程序将几乎总是运行,最小化任务栏。
    • 因此,在启动时加载XML,并且在关闭时的写入将是可以接受的(如果文件很大,可能需要一段时间)
  • 启动时间不是很重要,但是我希望查询要快得多
    • 在启动时阅读XML会相对较慢;但是,当它加载内存时,很难击败。任何给定的DB都需要启动DB引擎,进行Interop/crossCoress/cross-network调用,从磁盘加载结果(如果不是由引擎缓存),等等...

怎么样 sqlite? 听起来这很适合您的应用程序。

您可以使用 system.data.sqlite 作为.net包装器。

您可以免费获得SQL Server Express。我想说的不是什么,为什么要使用数据库,为什么不这样做呢?这种类型的问题正是数据库的目的,而SQL Server是一个非常强大且广泛使用的数据库,因此,如果您要去一些其他解决方案 需要提供一个充分的理由,为什么您不会使用数据库。

数据库非常合适。 sqlite 正如其他人提到的那样好。

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

第三个选项是类似的文档数据库 掠夺 这可能适合您的数据声音。

编辑
第四个选择是尝试 Lightwitch 几天后Beta出来时。 (8-23-2010)
/编辑

数据存储(硬盘的空白空间)总是会限制。根据Wikipedia的说法,SQL Express仅限于 SQL Server Express 2008 R2的10 GB

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top