對於 已經有與此命令,必須先關閉關聯打開 DataReader。 搜索到的解決方案

 http://q.cnblogs.com/q/6479/  

博客園,一種說是和外鍵有關,此處引用的是用戶,添加了Using方法

http://www.uipower.com/bbs/thread-36788-1-1.html

(

reader 是基於連接的, 查詢結果一次一條的讀取, 
  
也就意味着, 服務器在這條連接上給你維護着一個結果集, 以及當前讀取到的位置, 
  
這時, 你再執行另外一個查詢, 那這個結果集和當前位置怎麼辦, 
  
到時你抱怨, 服務器擔負不起這個責任, 
  
所以要求在這個連接上先關閉起先的 reader, 告訴服務器, 那個結果集你不要了.

)

 

一下,我本人感覺較好點的解釋,只是是能接受的

http://www.cnblogs.com/liaojunbo/archive/2008/04/26/1172348.html

 

    這個異常相信許多的朋友都遇到過,我也經常遇到, 都是編碼時大意,沒有關閉連接,簡單處理就OK之~~
      但今天同樣的問題,把我鬱悶壞了,整個網站操作數據庫的地方都報這個錯誤,出現的頻率很高,刷新一下就好了,使得網站不能正常運行。
      我仔細檢查了幾遍,都沒發現什麼問題,但還是報錯,最後沒辦法,把所有DataReader讀取的地方全刪之,改成用DataTable存放數據,在費周折,還是不行。    
      這個問題困擾了我一天,不過最後還是得以解決,解決方案簡單歸納如下:

1、主要原因是 DataReader 在打開使用時,一個 SqlConnection 只允許打開一個 DataReader,在開啓另一個 DataReader 時,必須將前面一個先 Close 掉。 

2、或許有朋友會問,我在語句中並未使用 DataReader,未何也提示同樣的錯誤,這個DataReader隱藏在哪裏,我給大家在這裏指出來,由於本人研究的還不夠深入,只知道有一種方法的調用後會生成 DataReader,我想這也是絕大多數人遇到頭疼的問題。

     在使用數據庫更新或插入語句時,大家通常使用 SqlCommand 的 ExecuteNonQuery() 方法,並且前提是定義了一個公共的數據庫連接(如果每次查詢時都生成新連接的話不會存在這個問題,但那樣數據庫佔用的資源相對會高很多),在ExecuteNonQuery() 後,內部會生成一個空的 DataReader 對象,並當當前的數據庫連接關閉掉後,該 DataReader 纔會釋放。因此在大家使用更新方法時,推薦使用 using 關鍵字,它作爲語句,可以將它所定義範圍內的對象都釋放掉。

    我將代碼粘貼如下,僅供參考:
 

 1private static string strConn = ConfigurationManager.ConnectionStrings["SQLLSB2008"].ConnectionString;
 2    private static SqlConnection myConn = null;
 3
 4    private static SqlDataAdapter myAdapter = new SqlDataAdapter();
 5    private static SqlCommand myCmd = new SqlCommand();
 6    private static DataTable myTable = new DataTable();
 7
 8
 9public static DataTable returnDataTable(string mySql, SqlParameter[] parameters)
10    {
11        myConn = new SqlConnection(strConn);
12        using (myCmd = new SqlCommand(mySql, myConn))
13        {
14            try
15            {
16                myCmd.Parameters.AddRange(parameters);
17                myAdapter = new SqlDataAdapter(myCmd);
18                myTable.Clear();
19                myAdapter.Fill(myTable);
20            }

21            catch
22            {
23                connClose();
24            }

25            finally
26            {
27                connClose();
28            }

29        }

30        return myTable;
31    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章