0

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

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

分析后,我有以下选项,请分享您的意见。

  1. 传递 sqlDatareader 本身

    • 这实际上不是我的想法,因为我必须一直保持连接打开。
  2. 使用数据表

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

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

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

4

3 回答 3

1

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

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

于 2013-10-31T10:55:15.837 回答
0

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

于 2013-10-31T11:00:13.877 回答
0

** 传递 sqldatareader 将花费您大量的网络使用,并且完全不建议长时间保持连接打开。

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

在这两个中,第二个更可取并提供良好的性能

于 2013-10-31T10:55:59.933 回答