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

看板C_Sharp (C#)作者 (Tomex Ou)時間11年前 (2014/07/25 02:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
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認為是讀即時資料的工具就好。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.165.104.31 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1406225836.A.73A.html
文章代碼(AID): #1JqKsiSw (C_Sharp)
文章代碼(AID): #1JqKsiSw (C_Sharp)