對于ADO.NET 2.0 連接調(diào)試解析
ADO.NET 2.0 還是比較常用的,于是我研究了一下ADO.NET 2.0 ,在這里拿出來和大家分享一下,希望對大家有用。本文向大家介紹ADO.NET 2.0 ,可能好多人還不了解ADO.NET 2.0 。
連接池是為每個唯一的連接字符串創(chuàng)建的。 當(dāng)ADO.NET 2.0 一個池后,將創(chuàng)建多個連接對象并將其添加到該池中,以滿足最小池大小的要求。 連接根據(jù)需要添加到池中,但是不能超過指定的最大池大小(默認(rèn)值為 100)。 連接在關(guān)閉或斷開時釋放回池中。
在請求 SqlConnection 對象時,ADO.NET 2.0 如果存在可用的連接,將從池中獲取該對象。 連接要可用,必須未使用,具有匹配的事務(wù)上下文或未與任何事務(wù)上下文關(guān)聯(lián),并且具有與服務(wù)器的有效鏈接。
連接池進(jìn)程通過在連接釋放回池中時重新分配連接,來滿足這些連接請求。ADO.NET 2.0 如果已達(dá)到最大池大小且不存在可用的連接,則該請求將會排隊。 然后,池進(jìn)程嘗試重新建立任何連接,直到到達(dá)超時時間(默認(rèn)值為 15 秒)。 如果池進(jìn)程在連接超時之前無法滿足請求,將引發(fā)異常。#t#
警告:
我們強烈建議您在使用完連接后總是將其關(guān)閉,以使連接返回到池中。ADO.NET 2.0 要關(guān)閉連接,可以使用 Connection 對象的 Close 或 Dispose 方法,也可以通過在 C# 的 using 語句中或在 Visual Basic 的 Using 語句中打開所有連接。 不是顯式關(guān)閉的連接可能不會添加或返回到池中。
移除連接
如果連接長時間空閑,或池進(jìn)程檢測到與服務(wù)器的連接已斷開,連接池進(jìn)程會將該連接從池中移除。 注意,只有在嘗試與服務(wù)器進(jìn)行通信之后才能檢測到斷開的連接。 如果發(fā)現(xiàn)某連接不再連接到服務(wù)器,ADO.NET 2.0 則會將其標(biāo)記為無效。 無效連接只有在關(guān)閉或重新建立后,才會從連接池中移除。
如果存在與已消失的服務(wù)器的連接,那么即使連接池管理程序未檢測到已斷開的連接并將其標(biāo)記為無效,ADO.NET 2.0 仍有可能將此連接從池中取出。 這種情況是因為檢查連接是否仍有效的系統(tǒng)開銷將造成與服務(wù)器的另一次往返,從而抵消了池進(jìn)程的優(yōu)勢。 發(fā)生此情況時,初次嘗試使用該連接將檢測連接是否曾斷開,并引發(fā)異常。
ADO.NET 2.0 引入了清除池的兩種新方法: ClearAllPools 和 ClearPool。 ClearAllPools 清除給定提供程序的連接池,ClearPool 清除與特定連接關(guān)聯(lián)的連接池。 如果在調(diào)用時連接正在使用,將進(jìn)行相應(yīng)的標(biāo)記。 連接關(guān)閉時,將被丟棄,而不是返回池中。