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 для просмотра всех подключений на сервере объявлений, мы замечаем, что соединения остаются открытыми. Но не все! Мы называем этот метод 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