将大量数据从数据库层传递到表示层

时间:2013-10-31 10:48:50

标签: c# architecture datatable sqldatareader

我有三层应用程序,其中所有与数据库相关的操作都在数据库层中执行。

对于某些查询,在sqldatareader中获取大量数据(大约10百万行,32列),我的问题是如何将这个大数据传递到表示层,我将生成一些报告。

分析后我有以下选项,请分享您的输入。

  1. 传递sqlDatareader本身

    • 这实际上不是主意,因为我必须始终保持连接打开。
  2. 使用数据表

    • 将sqldatareader加载到datatable中并将其作为return语句传递。 这听起来不错,但我不确定这是正确的方法,在这种情况下我想知道它是否会影响应用程序的整体性能。 ?
  3. 使用list作为自定义对象。

  4. 它的基于winform的应用程序仅安装在单机上,我使用的是.net framework 3.5

    非常感谢您的意见和反馈。

3 个答案:

答案 0 :(得分:1)

是否真的有必要在一瞬间传递这么多数据?分页会不会更好?它会解决你很多问题。无论如何,谁想在一个页面上看到1000万个数据?谁愿意等待5分钟,直到页面加载了所有数据?

如果您有三层体系结构,您可能希望使用一些业务对象而不是对象来与数据库直接通信。表示层应该对所使用的数据库一无所知或很少。因此,在数据库层中,获取已加载的数据,将其存储在业务对象中,并将这些对象传递给表示层。

答案 1 :(得分:0)

**传递sqldatareader会花费大量的网络使用费,并且根本不建议将连接打开很长时间。

**使用datatable是一个更好的选择,但它取决于您要对这些巨大数据执行何种操作。默认情况下,数据表最多可容纳16,777,216行

在这两个中,第二个更优选并且提供良好的性能

答案 2 :(得分:0)

您不应该将SQLDataReader或DataTable传递给另一个应用程序层,这将暴露您的DAL和DataBase模型实现,并将破坏应用程序层的分离。 话虽这么说,SQLDataReader保持与DataBase的开放连接。因此,您应该阅读所需的所有行,并尽早将其关闭。 在Designwise中,您应该使用自己的类来表示数据。 无论如何,您确定在表示层中需要那么多行吗?听起来很奇怪。