1

考慮下面的代碼:AdsConnection未關閉?

private static void GetData<TConnection, TCommand>(string connectionString, DataTable dataFromDbf, string commandText) 
    where TConnection : IDbConnection 
    where TCommand : IDbCommand { 
    using(IDbConnection oConn = GetConnection<TConnection>(connectionString)) { 

    oConn.Open(); 
    IDbCommand oCmd = oConn.CreateCommand(); 
    oCmd.CommandText = commandText; 
    dataFromDbf.Load(oCmd.ExecuteReader()); 
    oConn.Close(); 
    } 
} 

的方法是通用的,因爲不是所有的客戶有Adavatage DB服務器,我們需要回落到一個OleDbConnection。 然而,在大多數情況下,我們使用AdsConnection對象(來自Advantage.Data.Provider.dll)。

上面的代碼關閉連接,並在退出using語句時丟棄對象。

當我們使用Advantage Management Utility查看Ads服務器上的所有連接時,我們注意到連接保持打開狀態。但不是所有的!我們稱該方法可能爲200次,只有少數保持打開狀態,有時會超過客戶端MAX_CONNECTIONS。我們可以解決這個問題,謝謝Jens Mühlenhoff

的問題是:

爲什麼不調用oConn.Close()當連接緊密?任何人有任何想法?

回答

3

你使用連接池嗎?

根據ADS在線幫助,Close()可能不會真正關閉連接,但會將其返回到連接池。

在這種情況下,您可以禁用池或致電FlushConnectionPool()。注意這會刷新整個應用程序的連接池。

http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/dotnet_adsconnection_close.htm

http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/dotnet_adsconnection_flushconnectionpool_.htm

+0

超。調用FlushConnectionPool()做到​​了。謝謝。 – user1393612