目前,我正致力于设计和实施一个软件,该软件必须在两个具有master-detail arquitecture的表上实现CRUD操作。 Header有大约五十万行,细节大约有几百万行。
在数据集中填写所有这些数据都很疯狂,数据也可以更改,我对数据库的本地副本不感兴趣。 我很感兴趣,该软件工作流畅。虽然数据集可能不是最佳解决方案,但我应该使用它来与其他软件部分保持一致。
首先我想使用TypedDataset和一些像GetNext(),GetFirst(),GetByCod()的方法,但我不确定它是否是最佳解决方案.... 我正在做一点测试,不能很流利地工作。
我很想知道其他开发人员如何做到这一点,最佳实践以及使用大数据进行操作的“最佳选择”。
我正在使用Visual Studio 2008和Sql Server 2005。
增加: 当你谈到使用SqlDataReader时,你指的是这样的东西吗?
using (SqlConnection con = new SqlConnection(CON)) {
con.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE");
cmd.Connection = con;
SqlDataReader rd = cmd.ExecuteReader();
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = rd;
bindingNavigator1.BindingSource = bindingSource;
txtFCOD.DataBindings.Add("Text", bindingSource, "FIELD");
}
答案 0 :(得分:4)
我认为没有办法管理这么大的数据集。
您需要DataReader,而不是DataSet。
具有大量数据的数据库的本地副本是达到类似内容的有效方式(来自您的应用程序的快速响应),但是您将遇到同步(复制),并发等问题。
最佳做法是从服务器获取用户真正需要的数据。您必须使用服务器端处理,存储过程等。
我仍然不知道你想要操作什么数据以及你的应用程序的目的是什么,但是在客户端存在大量数据的另一个缺点 - 你的应用程序将需要大量的RAM和快速CPU。也许您的计算机速度快,能够处理这个问题,但请考虑当有人在装有1GHz Atom CPU的平板电脑上安装您的应用程序时会发生什么。那将是灾难。
答案 1 :(得分:3)
应该很少需要一次检索所有数据。
您可以考虑以下事项:
我个人认为你应该避免将大量数据加载到内存中,除非你完全控制加载的数量和处理时间。请记住,如果处理数据服务器端,则使用其他进程可能需要的资源。
您应该始终尝试使用较小的块,并且最好尽可能短的时间。这可以防止您的进程长时间占用任何资源。