我已经阅读了几篇关于何时使用DataSet与WinForms应用程序中的数据库结合使用的MS文章。我当然喜欢DataSet提供的易用性,但在使用大型数据源时会有一些问题。我想使用SQLite数据库本地存储已处理的Web日志信息。这可能会产生数万行数据。
当通过数据库表填充DataSet时,它最终是否包含数据库中的所有数据,还是只包含数据库中的一部分数据?
我可以使用DataSet向数据库添加行,例如执行更新,以某种方式“清除”DataSet在内存中保存的内容,然后执行其他行添加吗?
那么基本上可以管理DataSet当前在内存中保存的内容吗?如果DataSet表示包含100,000行的表,这是否意味着在数据库甚至可用之前需要将所有100,000行从数据库加载到内存中?
感谢。
答案 0 :(得分:2)
这里有非常重要的观点。这些要点是在.Net的开头提出的,当时我们突然转向.NET中引入的断开状态。
您的问题的答案是分页。您需要手动编码网格或其他显示设备(控件),以便以块的形式查询数据库。例如,您有一个控件(但不是网格),它有字段和滚动。您点击滚动201。点击200次,滚动浏览200条记录,点击#201,查询数据库200多条。可能是,当数据集中的数量达到1000时,添加一些逻辑来删除200条记录。这只是一个例子。
要保存数据,您可以将其添加到同一DataSet/DataTable
。这样做的方法很少。 DataSet/DataTable
具有识别新的或已编辑的行,关系等的功能。在严肃的系统上,实体列表封装Datatables
并提供自定义。
您可能希望了解Entity Framework
能力。我不确定是否包含此功能。
基本上,对于一些使用小数据的简单应用程序,可以使用开箱即用的ADO.net。但是在一个严肃的系统中,通常,ADO.NET有很多基础工作可以提供可靠的数据访问层以及更多额外的工作来创建有利的用户体验。在这种情况下,它将以块的形式加载数据,因为如果你加载100K记录,用户将不得不等待首先加载,然后很难滚动所有这些。
最后,您需要查看您的应用程序是什么,它的用途,以及对用户满意或不满意的内容。