0

我的 WinForms C#/.NET 应用程序需要一个表格/网格控件来向最终用户显示记录。记录很简单,只包含两个字段,一个字符串和一个日期/时间字段。我需要持久化数据,我想知道使用什么最有效的控制和存储后端。数据是非关键的(即——不是健康或财务记录,或任何需要广泛安全或任何加密的敏感数据)。

到目前为止,我发现的一种解决方案是将 DataGrid 控件与 SQL Server Compact Edition 结合使用。我从本教程中了解了这个解决方案:

http://www.dotnetperls.com/datagridview-tutorial

似乎这对我的应用程序来说可能是多余的。此外,我担心安装 SQL Server CE 的复杂性,尤其是在安装过程中涉及管理员与用户帐户权限问题时:

http://msdn.microsoft.com/en-us/library/aa983326(v=vs.80).aspx

是否存在具有内置文件加载/保存功能的表格或网格控件,它使用简单的磁盘文件作为存储方法,也许是逗号分隔的 ASCII 文件?我想要一些我仍然可以使用 SQL(通过 LINQ)与之交互的东西。另外,我希望这可以透明地完成。也就是说,如果我以后想升级到 SQL 数据库引擎解决方案,我与数据接口的代码不会改变(当然,数据库打开/创建代码除外)。

或者我最好还是硬着头皮继续使用 SQL Server CE 或者 SQLite:

适用于 .Net 的良好嵌入式数据库解决方案(如 SQLite)

如果您对安装问题和易用性有任何警告或轶事,我们将不胜感激。

4

2 回答 2

2

我强烈建议您使用嵌入式数据库,因为在不久的将来使用完整的数据库会更容易。SQL Server CE 是一个不错的选择,如果你想变得更大,你可以简单地使用一个完整的 SQL Server 数据库,只需对代码进行最少的更改,SQL Server CE 的唯一缺点是你需要安装它并且它需要.NET Framework 4,除此之外我认为它没有什么大问题。

于 2013-02-18T20:19:25.133 回答
2

在我的项目中,我们使用对象数据源。网格可以像绑定数据表一样容易地绑定到对象集合。您可以使用简单的序列化引擎存储/恢复数据(XmlSerializer 相当容易实现)。制作一个基本对象,使用 List 或 BindingList 作为数据集,并在需要时在后端对其进行序列化/反序列化。

List 和 BindingList 都支持 Linq 查询。

稍后添加数据库保存就像编写将对象保存到数据库的代码一样简单,代替序列化代码,完全不改变前端。

就“正确”解决方案而言……有很多不同的方法可以做到这一点,这归结为个人喜好,可能还有实际需求和预期的未来发展。我发现使用对象编码更容易,因为数据操作更容易,但如果您要直接输入记录,不需要数据操作,直接进入数据库更容易。这仅取决于数据以及您打算用它做什么。

于 2013-02-18T20:00:03.300 回答