这个项目你会推荐什么?

4
我需要使用C#创建一个Windows平台的应用程序。通常情况下,我只在一台电脑上工作:它安装了Visual Studio 2010、Microsoft SQL Server和其他一些工具。例如,如果我使用Entity Framework,我知道它会工作,因为我已经安装了SQL引擎。
这里是我的问题和这个问题的重点:
1. 您将使用什么来保存信息?这个软件将销售给各种第三方公司,我无法想象要逐个公司安装SQL Server,然后安装表,最后才能使其工作。它需要Just Work™。
2. 我需要能够按日期、ID、名称、位置等搜索“记录”。使用SQL会很容易,但我会遇到问题1的问题。
我相信我错过了每个开发者在某些时候都学到的东西,所以提前感谢您的指导。
编辑:错过了最重要的问题,那就是项目是什么?
基本上,它保存来自收据的信息,然后您可以扫描收据(我将使用Office API),并将该扫描与先前输入的条目关联起来。因此,它将是ID、名称、金额、扫描图像。简而言之。
编辑2:另一个重要的信息:
这将只有一个并发用户,无论我使用什么持久性工具,它都必须能够保存大量信息。我不太清楚带有偶尔图像的纯文本需要多少空间,但我宁愿有额外的空间,也不想需要更多的空间。

这将是客户端-服务器应用程序还是仅为客户端工作区而没有任何并发用户更新? - Nick Martyshchenko
完全独立自主。它只会与自己互动。 - delete
2
那就跟大家建议的一样,选择SQLite吧 :) - Nick Martyshchenko
1
如果您以后需要更改数据访问方式,您可能需要考虑将其抽象化。我发现,“这将仅有一个并发用户”之类的要求经常会发生变化。即使您使用像EF这样的O / RM,请考虑限制依赖它的类的数量。 - TrueWill
避免依赖于特定数据库的一种非常简单的方法是使用OLE DB。 - Brian
7个回答

14

您可以看一下SQLite。它是便携的,不需要安装任何东西,并且被常见的ORM支持。


2
+1 对于SQLite来说。这是一个极其简单的ACID兼容数据库。 - Byron Whitlock
是的,SQLite已经被许多应用程序使用,例如Skype和Google Chrome浏览器。 - Darin Dimitrov
2
如果您已经知道如何使用MS SQL,那么弄清楚SQLite应该非常容易。安装只是将dll包含在您的项目中,数据库只是一个文件。 - Brian
+1. 它还支持内存数据库实例化,当您有一堆单元测试时,这将为您提供巨大的性能提升。然而,与完整的 SQL Server 相比,在使用磁盘数据库时它仍然会慢一些,但是嘿 - 这是一个零配置数据库,您不能指望它创造奇迹。 - vgru

3
您可以在安装时自动安装SQL Server Express Edition并以编程方式设置SQL数据库。这是常见的做法。
如果您不需要SQL Server的所有功能,则可以使用SQL Compact Edition。这要简单得多,但不能支持多用户等功能。
SQLite也很好用。
SQL Express仅限于4GB。因此,另一种常见的策略是默认使用SQL Express安装和数据库设置,但允许用户选择现有的SQL Server安装,然后您只需设置DB(使用相同的设置代码)。
您应该告诉我们有多少数据、多少用户等信息。

如果我没记错的话,SQL Express 也有大小限制(每个数据库大约在2GB左右)。 - Mike Hofer
3
SQL Server是一款非常出色的软件。但SQL Server CE就是一坨巨大的垃圾,请远离它。 - Byron Whitlock
1
SQL Express 2008 R2 限制为10GB。 - Nick Martyshchenko
SQL Server Express在安装过程中可能会比SQLite更容易出现问题,因为它使用了一些服务等复杂的功能。相比之下,由于SQLite较为简单,客户端无法正常使用软件的情况可能会更少发生。 - Brian
他需要告诉我们规模和范围的需求。SQLite 对于一些需求(真正的客户端服务器)无法使用。如果 SQLite 足够好,那么就使用它。顺便说一句,SQL Express 有一个非常方便的无痛安装程序,可以嵌入其他 MSI 中,我们一直在使用它。 - pm100

3
如果您准备将目光放在SQL之外,您可能需要看一下面向文档的数据库,例如RavenDBMongoDB
祝贺您自己独立出去。

我也是这么想的。如果我是Sergio,我会尝试一些不同于SQL的东西。只是为了好玩和学习新东西 :) - Paw Baltzersen
@Paw 那是我思考的一部分 :). 我主要的理由是,发票的概念相当灵活,而文档型数据库可能更适合潜在的流动\非结构化领域。 - Adrian Russell

1

我在几个项目中使用了Firebird。它可以进行xcopy部署,如果需要更改,也可以成为一个不错的服务器。如果需要,它可以在Linux和MacOSX上运行(使用Mono进行.Net实现)。

这只是提供另一个选择。SQLite看起来也是一个不错的选择。


1

我要冒险提出一个非常荒谬的建议。

你是否认真考虑过将XML作为你的数据存储方式?LINQ to XML使得查询变得轻而易举,而且性能非常高。不需要安装任何额外的软件即可支持它。这满足了你的“只需运行”要求。这只留下了磁盘空间问题。

然而,“磁盘空间很便宜”。而且由于你节省了额外软件安装所需的空间,你可能没有那么多需要担心的了。

这是值得考虑(或重新考虑)的一个选项。

只是随便说说而已。


这是我的最初想法,实现起来很简单,但我因为需要搜索而犹豫不决。你能否通过日期、ID和其他字符串搜索XML? - delete
对于一个非常简单的教程,演示如何以类型安全的方式实现这一点,请参见此处:http://www.joe-stevens.com/2010/01/08/linq-to-xml-tutorial/. 一旦您在可枚举列表中拥有对象,您可以使用LINQ to Objects进一步按日期或其他类型过滤列表。 - Mike Hofer

1

如果您使用 .net,我认为最简单的方法是设置一个 Sql Server Compact 数据库,它是一种由 Microsoft 制作的 sqlite,易于集成到 VS .Net。

下面是从网站 http://www.microsoft.com/sqlserver/2008/en/us/compact.aspx 复制的描述,您可以免费下载。

嵌入式数据库用于构建客户端应用程序

Microsoft SQL Server Compact 是一个免费的 SQL Server 嵌入式数据库,非常适合构建移动设备、桌面和 Web 客户端的独立和偶尔连接的应用程序。

主要特点

  • 免费使用和分发
  • 支持桌面和移动设备
  • 小型占用空间,易于部署
  • 完全可嵌入式架构
  • 无需管理
  • 单文件、无代码数据库格式
  • 支持 ClickOnce、XCopy、MSI、CAB 和非管理员嵌入式安装选项
  • 支持所有 Microsoft Windows 嵌入式、移动、桌面和服务器操作系统
  • 支持丰富的 Transact-SQL 语法子集和 SQL Server 数据类型
  • Microsoft Visual Studio 2008 集成
  • 支持 ADO.NET、LINQ to SQL、LINQ to Entities 和 ADO.NET Entity Framework
  • 支持多个并发本地连接

检查SQLite与SQL CE http://bit.ly/biBmoG,在移动应用中的SQLite vs. SQLCE vs.?- Stack Overflow http://bit.ly/cZHnw1 - Nick Martyshchenko

0

根据您提供的所有细节,嵌入式数据库将是最佳解决方案,请使用System.Data.SQLite


请查看 OP 的新编辑(您发布后进行的编辑)。只有一个并发用户,我认为峰值负载不是一个问题。 - Brian
谢谢@Brian,但是在你评论我的帖子(使用SQLite)之前4分钟,我已经发表了评论 :) 好的,我也改变了我的答案。 - Nick Martyshchenko
那个链接现在已经失效了。 - d219
相信我现在已经找到了等价物 - http://system.data.sqlite.org(将更新答案) - d219

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