C#中持久表/网格的正确解决方案,不需要完整的数据库解决方案?

时间:2013-02-18 19:47:07

标签: c# .net database sqlite datagrid

我的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:

Good embedded database solution (like SQLite) for .Net

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

2 个答案:

答案 0 :(得分:2)

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

List和BindingList都支持Linq查询。

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

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

答案 1 :(得分:2)

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