【问题标题】:Correct solution for persistent table/grid in C# that does not require a full database solution?C# 中不需要完整数据库解决方案的持久表/网格的正确解决方案?
【发布时间】:2013-02-19 04:19:25
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net database sqlite datagrid


    【解决方案1】:

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

    List 和 BindingList 都支持 Linq 查询。

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

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

    【讨论】:

    • 谢谢。您是否知道演示您建议的技术的简明教程(带有对象数据源的网格控件)?到目前为止我发现了这个:tech.pro/tutorial/776/…
    • 该教程显示了您需要了解的所有内容。 Object、PropertyChanged、BindingList 等。您可以声明自定义列表实现并自己实现 IBindingList 接口,尽管这有点像 POTA! (去过那里,做过,不想再做一次)。稍微了解一下 XmlSerializer 的基本实现,这应该是让某些东西正常工作的其余基础知识。
    • 比基础知识稍微复杂一点,但它也包括那些。此示例重点介绍属性,让您了解对象生成的 xml 的实际外观。在跨网络(SOAP 和其他类似协议)来回传递它时很方便。 codeproject.com/Articles/14064/…
    【解决方案2】:

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

    【讨论】:

    • +1 用于嵌入式数据库路由。但是请注意,目前 Windows 应用商店应用程序(以前的 Metro)不支持 SQL CE。支持 Sqlite。如果 Windows 8 是一个潜在的目标平台,请记住这一点。
    • @chuex,谢谢,因为他没有提到 WinRT 或 Windows 应用商店应用程序,我假设他指的是完整的 .NET 开发,但当然,如果您的目标是 WinRT,唯一受支持的数据库(截至目前)是 SQLite,除非您想使用 Web 服务和 OData,否则无法选择更高的数据库。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2017-10-02
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多