4

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

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

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

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

谢谢。

4

1 回答 1

2

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

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

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

可能是你想研究Entity Framework能力。我不确定那里是否包含此功能。

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

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

于 2013-10-22T15:36:45.020 回答