DataReader是ADO.NET里即时读取资料进内存的类别,
当然一个连线CONN同个时间应该只能用一个DataReader在读取资料
不过实务上我们会同时读取nested datareader二层的资料
这部分的讨论请详见:
c# - SqlDataReader inside SqlDataReader - Stack Overflow
http://0rz.tw/YBYsZ
MultipleActiveResultSet就是解决同时读取多笔资格的即时reader
不过这种其实没多大意义,也不用钻研太多
毕竟reader只是读即时资料的类别,最终资料还是要读进datatable
或orm poco物件,再去做处理呀!
数据库里同一个record,也会同时被不同的sql指令读取
而产生record被lock或新旧的问题
而datareader就是该connection去读资料的一个类别
你硬要同时要在一个conn下去产生两个reader来nested reading
也容易引起竞争资源的问题,
mars(多笔结果)的功能只是让reader去读取不同的地方
只是避免资源读取的竞争冲突而己,
所以这种底层的东西研究太深入,也没实务上的意义。
我觉得sql指令下得好,以最少的资料量取回,就放在离线内存的datatable内
再作比对即可,不一定得想在即时reader作nested reading比对
这就像网上看线上即时视频,免下载线上观看,
但这样作总是容易遇到网络断线或龟速的时候,还是先下载一份再看为宜。
在entity framework取值作orm时,底层也都是用reader读值的
不要去计较太多这类的,因为reader的读取资料又分好多种方式决定效率
所以我们不用硬去记忆这种,只要将reader认为是读即时资料的工具就好。