DataReader關閉的問題

2021-10-12 19:24:44 字數 522 閱讀 5562

sqlcommand在每次執行executenonquery()方法之後,內部會生成乙個空的datareader物件,該物件只有在資料庫連線關閉之後,才會被釋放掉,加上上邊提到的,在dbhelper類中資料庫連線物件是乙個靜態的全域性變數。因為在同時呼叫api進行資料查詢時,在第乙個查詢還未結束,資料庫連線物件還未關閉,第二個查詢卻已經開始查詢,所以才會出現datareader沒有關閉的情況

方法:使用using的形式:

using(sqlconnection sqlconn=new sqlconnection(「資料庫連線字串」)

{sqlconn.open();

sqlcommand com=new sqlcommnand(sqlcon,」sql」);

/執行訪問資料庫操作**

using指定了sqlconnection的物件作用的範圍,且是獨佔使用的,當使用結束之後會自動將其進行釋放,所以也就很好的解決了上邊的問題,即使是同時多次訪問,也不會有datareader未關閉的情況,因為只有一次訪問完,釋放之後才會進行下一次的訪問。

DataReader關閉的第三種解決方法

第三種方法 之所以會出現上邊報出的錯誤,往往都是因為資料連線物件是靜態 全域性的物件,相應有很多朋友為了避免多次的宣告 建立物件,乾脆將該資料連線物件設定為靜態的全域性的,這樣做的確可以省下不少的功夫,但是帶來的弊端也是顯而易見的,也就是再高併發操作的情況下,會出現上邊提到的錯誤。因此,這裡建議,將...

DataReader的使用總結

對學習.net的人來說ado.net應當是不陌生了,不過我在這裡還是想總結一下關於datareader的使用 datareader包括了兩種形式 sqldatareader和oledbdatareader,其中很多的用法和屬性都是相通的。首先datareader從資料庫當中檢索唯讀,只進的資料流,它...

datareader和dataset的區別

dataset是乙個記憶體資料庫,你取資料的時候可以把資料放進去,資料取完就可以斷開連線了,這樣你就可以在dataset中去取資料,和資料庫就無關了。這樣非常方便,但有個問題,你把資料放記憶體裡,是要占用記憶體空間的,如果這個dataset中放了很多資料的話,效率就有問題了,你在乙個大的datase...