Справочная информация:
Я работаю с программой, написанной на C ++, которая использует ODBC для собственного клиента SQL для установления соединений для взаимодействия с базой данных SQL Server 2000.
Проблема:
Мои соединения абстрагируются в объект, который открывает соединение, когда создается объект, и закрывает соединение, когда объект уничтожается. Я вижу, что объекты разрушаются: их деструктор запускается, и внутри этих деструкторов вызывается SQLDisconnect( ConnHandle )
, за которым следует SQLFreeHandle( SQL_HANDLE_DBC, ConnHandle );
Однако, наблюдая за подсчетом соединений с помощью sp_Who2
или Performance Monitor в SQL показывает количество соединений увеличивается без смягчения, несмотря на то, что эти соединения разрушаются.
Это не оказалось проблематичным до тех пор, пока не была выполнена цепочка функций, которая выполняется достаточно долго для создания нескольких тысяч таких объектов и, как таковых, нескольких тысяч соединений.
Вопрос:
Кто-нибудь видел что-нибудь подобное раньше? Что может быть причиной этого? Мои первые поиски в Google не оказались очень плодотворными!
EDIT:
Я подтвердил, что SQLDisconnect
возвращается без ошибок.
Пул соединений отключен. Фактически, когда я пытаюсь включить его с помощью SQLSetEnvAttr
, мое приложение вылетает при втором вызове SQLDriverConnect
.