1. 程式人生 > >關於SqlDataReader使用的一點疑惑

關於SqlDataReader使用的一點疑惑

跟著 一點 過程 字段 抓取 .sql 行數據 inf 其中

C#中的SqlDataReader類(System.Data.SqlClient)是用來在保持打開數據庫連接的狀態下取數據用的

用法如下圖:

技術分享圖片

“保持與數據庫的連接”這個特性也是SqlDataReader與SqlDataAdapter的最大區別,

思考:

既然SqlDataReader在讀取數據的時候是保持對數據庫的連接,

那麽,如果在ExecuteReader();方法執行之後,在reader.Read()進行逐行取值的過程中,

我們改變數據庫某一行的值,那麽此時這個reader走到這一行時,顯示的應該是改變之前的值,還是改變之後的值呢?

試一試:

首先數據庫有兩條數據,F_XMJSName字段內容分別為“張三” “李四”

技術分享圖片

執行代碼,並讀取reader返回的第一行的字段值,是“張三”沒錯。

技術分享圖片

此時我們修改數據庫第二行的值,把“李四”改成“王五”

技術分享圖片

此時繼續執行代碼,進行第二行數據的字段抓取,取得的數據依然是“李四”,而非我希望的“王五”

技術分享圖片

猜想: 當Command執行過ExecuteReader()方法之後,返回回來的reader對象,應該是引用了數據庫的一個快照,

所以無論在這之後如何改變數據庫裏面的數據,reader遍歷讀取的數據應該是不會跟著變化的。

為了驗證猜想,扒了扒微軟的源碼,但是沒找到太根本的解釋,也有可能是技術太菜,沒看懂。。

如果有大神知道其中的原理,歡迎留言

關於SqlDataReader使用的一點疑惑