Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1187359717
Ricks
2007-08-17 18:08
2007.09.16
Зацените фотографии


2-1187609682
R.O.O.T
2007-08-20 15:34
2007.09.16
Вопрос!!!


2-1187604435
vitv
2007-08-20 14:07
2007.09.16
Ошибка при открытии файла


4-1174766392
Дмитрий Белькевич
2007-03-24 22:59
2007.09.16
Как зазипоповать файл win xp api?


15-1184659616
vajo
2007-07-17 12:06
2007.09.16
Бесплатные аналоги ПО





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский