![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объясните мне работу АДО-соединений, а то там фигня какая-то... [D7, MSSQL]
Aleksandr. © (2004-08-18 19:54:00)Суть задачи в том, чтобы в программе соединения работали только на период реального обращения к таблице, так как SQL-Server периодически отрубается на бэкап и все соединения разрушаются (я писал по этому поводу запрос). Стал высматривать, в каких участках кода у меня остаются открытые соединения.
Создаю ADOConnection, ставлю ему KeepConnection=false, создаю ADOQuery, ему в Connection ставлю этот ADOConnection, делаю SQL.Add(), открываю, смотрю при этом через Process Explorer на TCP - полная фигня творится. Еще во время SQL.Add появляется порт на Listened, затем при открытии появляется еще порт на Listened и на этот же порт Established. Потом закрываю ADOQuery - тот порт, на котором было Listened и Established, через некоторое время из списка пропадает, а первый так и остается висеть. Что это за нафиг и как с ним бороться?
KSergey (2004-08-19 21:06:00) [1]> [7] Aleksandr. (19.08.04 16:13)
> но в программе остаются висеть какие-то сломанные
> служебные соединения, от которых невозможно избавиться!
Но чем они мешают - можно узнать??
Aleksandr. (2004-08-19 16:13:00) [2]KSergey © (19.08.04 14:29) [6]:
Ну я же несколько раз объяснил, что соединение через Connection работает, но в программе остаются висеть какие-то сломанные служебные соединения, от которых невозможно избавиться!
KSergey (2004-08-19 14:29:00) [3]Я правда не сталкивался именно с такой ситуацией...
Но если делать так:
1.подключиться клиетном к серверу
2.выполнить запрос
3.закрыть соединение
4.перезапустить сервер
5.подключиться клиетном к серверу
6.выполнить запрос
7.закрыть соединение
Неужели после п.4 не удасться соединиться? Не проверял, признаться, но что-то не очень верится в такое...
Aleksandr. (2004-08-19 14:18:00) [4]Попытаюсь раскрыть суть трабла истчо детальнее. Когда при добавлении в Query текста запроса появляется левая, неубирающаяся "слушалка", все последующие добавления текстов в запросы начинают "ходить" через нее. То есть если я создам истчо одну пару Connection-Query, они отработают и закроют свои порты, но при при добавлении текста в их запросы на каком-то уровне происходит работа с этой слушалкой, и при отключенном MS SQL Server это приводит к ошибке, определяемой как "Неизвестная ошибка". То есть даже при включении сервера эта слушалка остается висеть сломанной и даже при наличии нормальных коннектов от ADOConnection попытки хотя бы добавить текст в запрос приводят к исключительной ситуации. Так что нет проблем отработать ошибку с созданием управляемого соединения, но никак не могу убрать из системы созданное на другом уровне служебное соединение, через которое АДО пытается толкнуть какие-то свои заморочки.
jocko (2004-08-19 09:31:00) [5]если можно - поподробнее, причем здесь TCP?
насколько я понимаю на сервере остаются незакрытые процессы, список которых видно хотябы через sp_who2, не уверен, возможно, бэкап их завершает, так вот при чем здесь порты?
И главное - в чем вообще проблема, обработай ошибку и создай новое соединение.
KSergey (2004-08-19 07:22:00) [6]Я пнимаю так. Вы немного слишком плотно к задаче подошли.
Query отработал?
Connection отрубился (Close вызван)?
Ну и чудненько! И не хай себе сервер рубится на бэкап или что там еще. А какие там порты или что еще - боюсь, нифига тут не поделать. На кой порты-то сдались?
Aleksandr. (2004-08-18 20:37:00) [7]surkis (18.08.04 20:30) [1] :
Так мне как раз и не надо, чтобы соединение оставалось открытым. Речь как раз о том и идет, что появляются слушалки двух портов при работе с ADO, из которых исчезает по закрытии только одна.
surkis (2004-08-18 20:30:00) [8]> Что это за нафиг и как с ним бороться?
А чего с ним бороться? Зачем тебе постоянно держать ADOConnection открытым? Когда закрываешь ADOQuery, закрывай ADOConnection, а перед открытием ADOQuery открываешь ADOConnection