c# - 数据源很大时DataSet的使用?

标签 c# database winforms sqlite dataset

我已经阅读了几篇关于何时在 WinForms 应用程序中结合数据库使用 DataSet 的 MS 文章。我当然喜欢 DataSet 提供的易用性,但在将它们用于大型数据源时有一些顾虑。我想使用 SQLite 数据库在本地存储处理过的 Web 日志信息。这可能会导致数万行数据。

当通过数据库表填充数据集时,它最终会包含数据库中的所有数据,还是仅包含数据库中的一部分数据?

我可以使用 DataSet 向数据库添加行,例如执行更新,以某种方式“清除”DataSet 在内存中保存的内容,然后执行额外的行添加吗?

那么是否有可能从本质上管理 DataSet 当前在内存中保存的内容?如果一个 DataSet 代表一个包含 100,000 行的表,是否意味着所有 100,000 行都需要在它可用之前从数据库加载到内存中?

谢谢。

最佳答案

你在这里有非常重要的观点。这些要点是在 .Net 之初提出的,当时我们突然转向 .NET 中引入的断开连接状态。

您的问题的答案是分页。您需要手动编写网格或其他显示设备(控件)的代码,以便它以 block 的形式查询数据库。例如,您有一个包含字段和滚动条的控件(但不是网格)。您给卷轴点击了 201 次。在 200 次点击中,它滚动浏览 200 条记录,在点击#201 时,它在数据库中查询 200 条记录。可能是,当数据集中的记录数达到 1000 时,添加一些逻辑来删除 200 条记录。这只是一个示例。

要保存数据,您可以将其添加到同一个 DataSet/DataTable。有几种方法可以做到这一点。 DataSet/DataTable 具有识别新的或编辑的行、关系等的能力。在一个严肃的系统上,实体列表封装 Datatables 并提供自定义。

您可能想了解Entity Framework 功能。我不确定那里是否包含此功能。

基本上,对于一些数据量小的简单应用程序,使用开箱即用的 ADO.net 是可以的。但是在一个严肃的系统中,通常,ADO.NET 有很多基础工作来提供可靠的数据访问层和更多额外的工作来创造良好的用户体验。在这种情况下,它将分块加载数据,因为如果加载 100K 条记录,用户将不得不先等待加载,然后很难滚动浏览所有记录。

最后,您需要了解您的应用程序是什么,它的用途是什么,以及什么会让用户满意或不满意。

关于c# - 数据源很大时DataSet的使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19521113/

相关文章:

c# - 具有多列的 WinForms 组合框 (C#)?

c# - 如何在用户书写时在 RichTextBox 中用不同的颜色为不同的单词着色,并在单击该彩色文本时引发事件

javascript - 如何清除asp.net MVC中文本框、下拉列表和复选框值中的值?

c# - 带有 SQL 查询的 Crystal 报表

c# - 文件路径中的正则表达式

MySQL 分为两个表或将所有内容保留在一个表中

c# - 隐藏窗体不关闭

c# - 使用 ScriptManager.RegisterClientScriptIninclude 注册 JavaScript 文件

java - 如何对多对多关系执行存在查询

database - Neo4j 获取所有节点和两个给定节点之间的关系