Текущий архив: 2007.09.16;
Скачать: CL | DM;
ВнизО корректном разрыве соединения с сервером БД Найти похожие ветки
← →
Ega23 © (2007-08-16 17:12) [0]Вопрос чисто теоретический.
Поскольку достаточно долгое время приходится клиентов к БД писать, данный вопрос в мозгу время от времени материализуется.
Итак.
Для определённости буду рассматривать MSSQL (версия - от 7 до 2005) и ADO.
Есть ADOConnection. Есть какое-то количество RecordSet"ов на клиенте.
Можно ли средствами непосредственно ADO или OLEDB определить на клиенте, что вот прямо сейчас соединение с сервером разорвалось?
← →
sniknik © (2007-08-16 17:22) [1]послать запрос попроще и ловить ошибку.
← →
Вася Правильный (2007-08-16 17:23) [2]э-э, извини что вмешиваюсь, но тема и топик как-то несогласованы (в теме - процесс разрыва, а в топике - результат разрыва)
← →
Ega23 © (2007-08-16 17:26) [3]
> э-э, извини что вмешиваюсь, но тема и топик как-то несогласованы
> (в теме - процесс разрыва, а в топике - результат разрыва)
Возможно. Скорее тема должна быть О корректной обработке разрыва соединения с сервером БД
← →
Ega23 © (2007-08-16 17:27) [4]
> послать запрос попроще и ловить ошибку.
На Idle? В дополнительном потоке?
← →
DVM © (2007-08-16 17:29) [5]
> На Idle? В дополнительном потоке?
в дополнительном потоке не получится ибо в доп потоке по идее свой ADOConnection должен быть и ты максимум, что узнаешь - это о разрве того другого, который в потоке ADOConnection.
← →
Anatoly Podgoretsky © (2007-08-16 18:20) [6]> Ega23 (16.08.2007 17:27:04) [4]
Зачем, делай запрос, когда пожелаешь узнать.
← →
Черный Шаман (2007-08-16 18:43) [7]
> Ega23 © (16.08.07 17:12)
>
> Вопрос чисто теоретический.
> Поскольку достаточно долгое время приходится клиентов к
> БД писать, данный вопрос в мозгу время от времени материализуется.
>
> Итак.
> Для определённости буду рассматривать MSSQL (версия - от
> 7 до 2005) и ADO.
> Есть ADOConnection. Есть какое-то количество RecordSet"ов
> на клиенте.
> Можно ли средствами непосредственно ADO или OLEDB определить
> на клиенте, что вот прямо сейчас соединение с сервером разорвалось?
Обрамляй любой запрос в try except. Если исключение, то тебе не все равно что вызвало ошибку - главное ее в лог записать и об ошибке пользователю сообщить(или в messagebox или в отдельном глобальном объекте окне регистрации ошибок, как я сделал.)
← →
isasa © (2007-08-16 20:53) [8]А фраза
If TADOConnection.Connected then
в нужный момент не помогает?
DVM © (16.08.07 17:29) [5]
Кстати нигде не нашел указание на то, что TADOConnection потоконебезопасен(про TADODataSet вопросов нет). И если надо работать в рамках одной сессии на сервере из нескольких потоков на клиенте, то вариантов нет. Хотя, на мой взгляд, это разновидность экстрима. Но, кстати, нормально работает ...
← →
Petr V. Abramov © (2007-08-16 22:34) [9]> определить на клиенте, что вот прямо сейчас соединение с сервером разорвалось?
вопрос-уточнение: накуй?
← →
Суслик © (2007-08-16 22:41) [10]
> Кстати нигде не нашел указание на то, что TADOConnection
> потоконебезопасен
я лох полный в COM, но насколько я помню у АДО потоковая модель - apartment. Посему нужно вызывать из создавшего потока.
Вроде так.
← →
Petr V. Abramov © (2007-08-16 22:44) [11]> Есть какое-то количество RecordSet"ов на клиенте.
ну и какое тебе дело, есть СЕЙЧАС соединение или нет? может, сейчас нету, а через 5 сек будет, и даже хендлы не потеряются???
← →
Piter © (2007-08-16 23:11) [12]Ага, вопрос неправильный, зачем тебе эта информация? Это вопросы из темы "А как определить, что есть доступ в интернет?"
Да какая разница есть он или нет, да и что такое интернет, какие сайты? Поэтому просто пробуй работать, ошибка - обрабатывай.
И в базах также, идеально был бы какой-нибудь модуль для работы с БД, более менее универсальный и стандартизированный и каждый запрос контролируется, если при запросе ошибка - значит, писать в лог или выводить ошибку, и неважно из-за чего она, сети нету, коннект порвался или сервер в даун ушел. Ошибка есть ошибка.
ну единственное, что если произошла ошибка разрыва соединения дополнительно пользователю можно предложить восстановить коннект или сделать это автоматом.
← →
MsGuns © (2007-08-16 23:15) [13]Если так критично - "чувствовать" наличие соединения, следует либо акцентировать "железо", либо в случае отсутствия такой возможности перейти на три звена.
ИМХО, проблема высосана из пальца либо от непонимания сути "клиент-сервера"
← →
Petr V. Abramov © (2007-08-16 23:20) [14]> Для определённости буду рассматривать
для неопределенности рассмотрю Oracle. есть утилита tnsping, и есть описание API, на котором она сделана. Вот пингуйся каждую секунду
> непосредственно ADO или OLEDB
"пилите, Шура, они золотые"
:)
← →
isasa © (2007-08-16 23:26) [15]Суслик © (16.08.07 22:41) [10]
я лох полный в COM, но насколько я помню у АДО потоковая модель - apartment.
Ну и что? По умолчанию CoInit - NO THREAD, но можно сделать MULTITHREAD и все великолепно работает из нескольких потоков(имеется ввиду один Connection, а DataSet-ы в каждом потоке свои).
Если клиент многопоточный, а вписаться надо в одну сессию, то по другому я не знаю как ...
← →
MsGuns © (2007-08-16 23:26) [16]>Petr V. Abramov © (16.08.07 23:20) [14]
>> непосредственно ADO или OLEDB
>"пилите, Шура, они золотые"
А что ты имеешь против этой сладкой парочки ?
← →
Petr V. Abramov © (2007-08-16 23:55) [17]> MsGuns © (16.08.07 23:26) [16]
какой парочки? Шура-пилите, Шура-золотые, .... все переислять не буду :))))
Страницы: 1 вся ветка
Текущий архив: 2007.09.16;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.057 c