2010-03-07 102 views
2

我使用System.Data.OdbcClient連接到傳統的rdbms系統。我想知道傳統rdbms系統是否支持連接池?假設我使用連接如下圖所示連接池在Ado.net中如何工作?

using (OdbcConnection con = new OdbcConnection("ConnStr")) 
{ 
    con.Open(); 

    //perform db operation 

} 

它建立連接,並在每次調用或者來自連接池的時間斷開。

回答

2

這一切都取決於在本機上配置連接池的方式。如果在此計算機上有效啓用連接池,則所示片段將使用池中的連接(如果可用),並且實際上不需要創建新的連接。

這是對連接池的好處:它是透明的應用程序,即你不需要做任何事情一樣,調用一個單獨的API等

有被做了區分:連接池一般處理與DBMS服務器的連接(如果您願意,則爲「SQL會話」)而不是與封裝這種連接的對象連接。因此,SQLsessions(相對而言是生產成本最高的元素)被有效地緩存,但每次都會重新創建ADO(或任何對象)。

連接池確保與SQL服務器的連接有效使用,但不保證新連接不會被創建(例如,在相對空閒一段時間後,某些連接可能會超時並且然後丟棄並重新創建)。

編輯(關於遺留RDBMS等從阿穆布巴克註釋]支持體)
使用ODBC,連接池是ODBC層的的特徵,而不是各種驅動程序ODBC使用連接到的底層存儲。因此,只要具有ODBC版本3.0或更高版本(以及底層驅動程序可供ODBC訪問的那麼長時間),ODBC就可以爲您管理連接池(假設您爲其提供必要的配置詳細信息)。
使用ODBC,看起來連接池可以通過編程方式進行配置/啓用。這並不會使連接池對程序透明的聲明無效,只是您可能需要在程序的初始化部分中進行一些調用來設置池,其餘的邏輯實際上使用連接保留不變。
參見例如這個MSDN article

+0

是否在ODBC驅動程序中實現連接池?甚至傳統的rdbms是否支持連接池? – Amitabh 2010-03-07 15:29:57

+0

@Amitabh:見編輯。具有ODBC的連接池需要ODBC版本3.0或更高版本,但池化邏輯位於ODBC層而不是基礎RDBMS驅動程序的級別。 – mjv 2010-03-07 16:42:55

0

它使用連接池,您可以(ans應該)在使用子句中「軟關閉」連接,但下次可能會獲得已建立的連接。