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

本文关键字:解决方案 网格 不需要 整数 数据库 针对 | 更新日期: 2023-09-27 18:00:12

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

到目前为止,我发现的一个解决方案是将DataGrid控件与SQLServerCompact 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数据库引擎解决方案,我端与数据接口的代码不会更改(当然,数据库打开/创建代码可能除外)。

还是干脆咬紧牙关,选择SQLServerCE或SQLite:更好

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

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

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

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

List和BindingList都支持Linq查询。

稍后添加数据库保存非常简单,只需编写将对象保存到数据库的代码来代替序列化代码,而不会对前端进行任何更改。

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

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