Re: [問題] Datareader的限制問題

看板C_Sharp (C#)作者 (mize)時間11年前 (2014/06/01 23:42), 11年前編輯推噓4(404)
留言8則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《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://www.ptt.cc/bbs/C_Sharp/M.1401637364.A.F22.html ※ 編輯: m339606 (61.223.37.85), 06/01/2014 23:43:30

06/02 14:11, , 1F
第二是說,同樣的物件裡都有dr,那分別用二個去new
06/02 14:11, 1F

06/02 14:11, , 2F
也算在同一個conn裡嗎?
06/02 14:11, 2F

06/02 18:02, , 3F
你在class有new connection的話,new的時候就是新的
06/02 18:02, 3F

06/02 18:03, , 4F
Dr也就不會是同ㄧ個
06/02 18:03, 4F
這問題圍繞在"實體"的認知上 一個Reader實體依存在一個Conn的實體上 你可以同時new兩個Conn實體來取得兩個Reader實體 但你沒辦法用一個Conn實體來取得兩個Reader實體 物件要區分出兩個狀況 1.靜態物件 2.非靜態物件 靜態物件在程式初始化時就已經建立了,那靜態物件裡面的靜態Conn實體就只存在一個 只存在一個所以受限於基礎的限制 非靜態物件你在new出來時才會建立出一個實體物件,你每次new都是不同的實體物件 裡面的Conn則理所當然的屬於不同的物件實體 ※ 編輯: m339606 (61.223.164.237), 06/02/2014 18:19:00

06/02 18:31, , 5F
所以若是靜態的話,整個系統只能存在一個Dr
06/02 18:31, 5F

06/02 18:31, , 6F
而動態的話,就是本身物件一個dr,是分開的
06/02 18:31, 6F
根據你的陳述沒辦法說是對的 我上面的陳述一直在強調"實體" 我可以在一個Class中宣告N個Conn實體取得N個Reader 但是根據你的陳述比較類似於,我整個程式運作只能存在一個Reader 或是 一個物件只能存在一個Reader ※ 編輯: m339606 (61.223.164.237), 06/02/2014 20:39:58

06/02 21:41, , 7F
所以應該是說,一個conn一個dr,是看有幾個conn?
06/02 21:41, 7F

06/03 20:59, , 8F
1個conn配一個Reader沒錯
06/03 20:59, 8F
文章代碼(AID): #1JYqdqyY (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1JYqdqyY (C_Sharp)