日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
超時時間已到,但是尚未從池中獲取連接。出現這種情況可能是因為所有池連接均在使用,并且達到了最大池大 2008年11月27日 10:11
ASP.NET c#在使用SqlDataReader讀取數據的時候,出現這個提示,在網上找了一些回答也沒有解決問題,最終還是看微軟的PetShop找到了答案。
我在一個循環中使用了SqlDataReader:
??????? using (SqlDataReader reader = SqlHelper.ExecuteReader("select * from region where fatherid=0"))
??????? {
??????????? while (reader.Read())
??????????? {
??????????????? // 把省一級的區劃存儲到一個 Dictionary 中備用
??????????????? Province.Add(reader["name"].ToString(), int.Parse(reader["id"].ToString()));
??????????? }
??????? }
雖然是在 using 語句中聲明的 SqlDataReader,但程序運行幾次之后還是出現了標題給出的的那個錯誤。在Sql Server 2005的 Manage Studio 中檢查進程信息時,發現只要程序運行一次,就會出現幾十個數據庫的連接沒有關閉(運行一次應該是讀取了30多個省份的信息)。運行兩三次后程序就崩潰了,進程信息達到120多個的時候就崩潰了。
于是就很奇怪,該關閉的Connection也都關閉了,Connection 和 SqlDataReader都是在using語句中聲明的,怎么會連接不關閉呢?
對比了我寫的SqlHelper類和PetShop中的SqlHelper類中的ExecuteReader方法后發現,他的ExecuteReader方法中的cmd.ExecuteReader()調用了一個參數:CommandBehavior.CloseConnection。
如下:cmd.ExecuteReader(CommandBehavior.CloseConnection)
這個參數MSDN中的解釋是:在執行該命令時,如果關閉關聯的 DataReader 對象,則關聯的 Connection 對象也將關閉。
也就是說,如果只在using語句中聲明SqlDataReader是嚴密的,那樣只是在程序結束后關閉了SqlDataReader,而和他關聯的Connection并沒有關閉(或者說釋放),因此,對于這種有關聯對象打開的情況,還必須明確的把關聯的對象也關閉,也就是CommandBehavior.CloseConnection參數提供的功能。
使用了這個參數后,運行多次該程序也沒有出現問題,進程信息中的連接數也總是保持在20多個,其中大概20個都是系統的連接。

總結

以上是生活随笔為你收集整理的超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。