我有三层应用程序,其中所有与数据库相关的操作都在数据库层中执行。
对于某些查询,在sqldatareader中获取大量数据(大约10百万行,32列),我的问题是如何将这个大数据传递到表示层,我将生成一些报告。
分析后我有以下选项,请分享您的输入。
传递sqlDatareader本身
使用数据表
使用list作为自定义对象。
它的基于winform的应用程序仅安装在单机上,我使用的是.net framework 3.5
非常感谢您的意见和反馈。
答案 0 :(得分:1)
是否真的有必要在一瞬间传递这么多数据?分页会不会更好?它会解决你很多问题。无论如何,谁想在一个页面上看到1000万个数据?谁愿意等待5分钟,直到页面加载了所有数据?
如果您有三层体系结构,您可能希望使用一些业务对象而不是对象来与数据库直接通信。表示层应该对所使用的数据库一无所知或很少。因此,在数据库层中,获取已加载的数据,将其存储在业务对象中,并将这些对象传递给表示层。
答案 1 :(得分:0)
**传递sqldatareader会花费大量的网络使用费,并且根本不建议将连接打开很长时间。
**使用datatable是一个更好的选择,但它取决于您要对这些巨大数据执行何种操作。默认情况下,数据表最多可容纳16,777,216行
在这两个中,第二个更优选并且提供良好的性能
答案 2 :(得分:0)
您不应该将SQLDataReader或DataTable传递给另一个应用程序层,这将暴露您的DAL和DataBase模型实现,并将破坏应用程序层的分离。 话虽这么说,SQLDataReader保持与DataBase的开放连接。因此,您应该阅读所需的所有行,并尽早将其关闭。 在Designwise中,您应该使用自己的类来表示数据。 无论如何,您确定在表示层中需要那么多行吗?听起来很奇怪。