Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как закрыть ADODB.Connection / 6 сообщений из 6, страница 1 из 1
23.04.2002, 10:55
    #32028559
SergKuz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть ADODB.Connection
ДОброго времени суток!
Открываю 2 ADO коннекшена. При закрытии (методы Close и Set Conn = Nothing) на сервере они остаются . Закрываются только после закрытия приложения. С одним коннекшеном - все нормально. Насколько я понимаю, это связано с кэшированием соединений. Как побороть данную проблему?

С уважением, Кузнецов Сергей!
...
Рейтинг: 0 / 0
23.04.2002, 13:30
    #32028570
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть ADODB.Connection
Приветствую всех,

Видимо, Ваше Приложение использует так называемый "resource pooling".
Ваши соединения после закрытия (Conn.Close) и высвобождения ресурсов
(Set Conn = Nothing) еще некоторое время остаются в пуле для повышения
производительности некоторых типов приложений.
Время, которое они (соединения) проводят в пуле после закрытия и
уничтожения ссылок на них, определяется параметром

HKEY_CLASSES_ROOT\CLSID\PROVIDER_ID\SPTimeout

(PROVIDER_ID - GUID, указывающий на провайдера, которым Вы пользуетесь)

По умолчанию этого значения нет в реестре и оно принимается равным 60
секундам. Вы можете создать и изменить его значение на меньшую величину
и таким образом, ускорить закрытие соединений. Однако делать это следует
осторожно, так как Ваше Приложение может от этого проиграть.

Вообще же все это подробно описано в документации Microsoft, например в
статье "Pooling in the Microsoft Data Access Components".

Удачи


P.S. Странно, что "С одним коннекшеном - все нормально".
...
Рейтинг: 0 / 0
23.04.2002, 13:35
    #32028572
Dankov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть ADODB.Connection
Это нормальное поведение. Pooling соединений. Отключить можно, если в строке подключения указать "OLE DB Services=-2;".
А чем мешают эти соединения?
...
Рейтинг: 0 / 0
07.05.2002, 14:36
    #32029662
StepIn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть ADODB.Connection
To Dankov

Мне надо открыть коннект к БД, затем закрыть, и удалить эту БД.
В VB все просто:

Dim Cn As New ADODB.Connection
strCnxn = "Driver={SQL Server};Server=Step;Database=Base;User Id=sa;Password=;"
Cn.Open strCnxn
Cn.Close
Cn.Cancel
Set Cn = Nothing

А как присвоить объекту Cn значение Nothing в VC++? Дело в том, что после применения метода Close к объекту Cn происходит нормальное закрытие коннекта. Но база Base, которую открываю в коннекте? еще в течение 2-3 минут остается "used by the process". Естественно, я не могу сразу удалить эту базу. Аналогичную ситуацию можно наблюдать в приведенном ранее тексте на VB, если закоментарить последний оператор: Set Cn = Nothing.
Как раз помогает ваше "OLE DB Services=-2;". Или есть еще какой-то способ?
Спасибо!
...
Рейтинг: 0 / 0
07.05.2002, 19:11
    #32029677
Miha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть ADODB.Connection
>>А как присвоить объекту Cn значение Nothing в VC++?
Если следующий код:
Dim Cn As New ADODB.Connection
представляется в ВС++ как:
ADODB::_ConnectionPtr pCn; pCn.CreateInstance( __uuidof(ADODB::Connection) );
то присваивание Nothing в VB эквивалентно:
pCn.Release();
Но странно, что это помогает в VB, насколько я знаю, pooling работает даже если
уничтожать объекты соединений на клиенте.
...
Рейтинг: 0 / 0
08.05.2002, 16:23
    #32029795
StepIn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть ADODB.Connection
To Miha
>>Но странно, что это помогает в VB, насколько я знаю, pooling работает даже если
>>уничтожать объекты соединений на клиенте.
Да, в VB, после выполнения Set Cn = Nothing , коннект сразу закрывается.
>>присваивание Nothing в VB эквивалентно: pCn.Release();
Я это уже пробовал. При использовании вызова ->Release();. все проходит правильно и корректно, объект действительно освобождается. А коннект остается открытым. Кроме того, нигде в MSDN в примерах о Close Method не используется pCn.Release();. Так что ж, остется только отключать Pooling соединений?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как закрыть ADODB.Connection / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]