作者m339606 (mize)
看板C_Sharp
标题Re: [问题] Datareader的限制问题
时间Sun Jun 1 23:42:40 2014
※ 引述《wind681201 (阿风~~)》之铭言:
: 在msdn上面有说,在connection里,只能存在一个datareader,
: 这一句话,我一直是看不懂,我的疑问是。
: 一、一个connection里只能存在一个Datareader?
: 二、只要是连线相同的资料库,只能有一个datareader?
: 三、关闭datareader就好,还是连sqlcommand也要一起关了,才可以用呢?
: 状况一:
: 在a.aspx网页里有一个connection连b资料库,在这里只能有一个datareader?
: 那在b.aspx网页中有一个connection连b资料库,就无法使用datareader?
: 也就是说,整个网站,多人使用一个datareader?
: 状况二:
: A class里,有conneciotn连资料库b,若我
: dim a1 as new a : dim b1 as new a
: 那是个存在一个datareader吗?还是说a1 b1都有自己的datareader可用呢?
: 状况三:
: 同样的连线中,跑槽状回圈,就不能用datareader因为只能有一个,可能
: 外层的datareader没关,就不能用在内层?
: 研究很久了,还是不清楚
一个Reader被建立出来後在尚未关闭或消灭之前connection都是保持着open
所以同样的connection实体再去做其他Command会丢出Exception
状况二不明白你说的意思
状况三
Reader是顺向而且不可逆的资料读取
你需要在後面大量程式码使用到的资料请读入DataTable
--------------------------------------------------
在想状况的时候实际把状况写出程式码来自己Run应该可以减少许多类似问题
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.223.37.85
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1401637364.A.F22.html
※ 编辑: m339606 (61.223.37.85), 06/01/2014 23:43:30
1F:推 wind681201:第二是说,同样的物件里都有dr,那分别用二个去new 06/02 14:11
2F:→ wind681201:也算在同一个conn里吗? 06/02 14:11
3F:推 Ammenze:你在class有new connection的话,new的时候就是新的 06/02 18:02
4F:→ Ammenze:Dr也就不会是同ㄧ个 06/02 18:03
这问题围绕在"实体"的认知上
一个Reader实体依存在一个Conn的实体上
你可以同时new两个Conn实体来取得两个Reader实体
但你没办法用一个Conn实体来取得两个Reader实体
物件要区分出两个状况
1.静态物件
2.非静态物件
静态物件在程式初始化时就已经建立了,那静态物件里面的静态Conn实体就只存在一个
只存在一个所以受限於基础的限制
非静态物件你在new出来时才会建立出一个实体物件,你每次new都是不同的实体物件
里面的Conn则理所当然的属於不同的物件实体
※ 编辑: m339606 (61.223.164.237), 06/02/2014 18:19:00
5F:推 wind681201:所以若是静态的话,整个系统只能存在一个Dr 06/02 18:31
6F:→ wind681201:而动态的话,就是本身物件一个dr,是分开的 06/02 18:31
根据你的陈述没办法说是对的
我上面的陈述一直在强调"实体"
我可以在一个Class中宣告N个Conn实体取得N个Reader
但是根据你的陈述比较类似於,我整个程式运作只能存在一个Reader
或是
一个物件只能存在一个Reader
※ 编辑: m339606 (61.223.164.237), 06/02/2014 20:39:58
7F:推 wind681201:所以应该是说,一个conn一个dr,是看有几个conn? 06/02 21:41
8F:→ m339606:1个conn配一个Reader没错 06/03 20:59