Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129

Как правильно обработать ошибку "нет соединения с сервером БД"?

01.07.2019, 23:07. Показов 1095. Ответов 6

Студворк — интернет-сервис помощи студентам
Периодически по разным причинам недоступен сервер баз данных. При попытке выполнить запрос появляется соответствущее сообщение. Хочется сделать при такой ошибке окошко ожидания, которое переодически будет опрашивать сервер и при доступности продолжит выполнение. Как это лучше организовать? Есть что-то такое уровне ADO или EF? Типа повторить неудачный запрос или что-то в этом роде?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2019, 23:07
Ответы с готовыми решениями:

Обработать ошибку соединения с сервером MSSQL
Доброго времени суток.. Столкнулся тут с одной проблемой, при подключении программы к серверу допустим такие ситуации: 1. когда...

Как правильно обработать ошибку соединения _ConnectionPtr Open
hr = pConnection->Open("Server=strconn, "", "", adConnectUnspecified); Знаю, что ошибка здесь, но в чем именно? Есть пример обработки...

Как обработать ошибку соединения TClientSocket?
TClientSocket работает у меня асинхронно (т.е. ClientSocket1.ClientType:=ctNonBlocking). И при неудачном соединении...

6
Эксперт .NET
 Аватар для Usaga
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,137
02.07.2019, 05:48
serg4242, это нездоровая и ненормальная тема. Лучшим решением будет исправление ситуации с доступностью базы, ибо в такой ситуации вы не сможете гарантировать, что данные в базу нормально записались. Ладно, если посреди транзакции связь прервётся, транзакция откатится и вы её можете начать с начала. А если в самом конце? Как вы узнаете, завершилась транзакция коммитом или нет? Начинать её сначала или данные уже зафиксировались?

Это полная фигня. Добейтесь нормальной доступности сервера базы данных. Не надо городить костыли.
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
02.07.2019, 07:27
Полностью согласен с Usaga, нужно лечить причину, а не следствие
0
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
02.07.2019, 08:16  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Лучшим решением будет исправление ситуации с доступностью базы
Проблема физическая - отключили свет, сломался или отключился хаб. Проблема не частая, но решить её не удаётся. Мысль была в том, чтобы во время такой ситуации вместо окошка с ошибкой появлось диалоговое окошко, ожидающее пока человек решит проблему. И после решения надо ли автоматически повторить не успшные операции, либо предложить оператору это сделать.
Цитата Сообщение от Usaga Посмотреть сообщение
Ладно, если посреди транзакции связь прервётся, транзакция откатится и вы её можете начать с начала. А если в самом конце? Как вы узнаете, завершилась транзакция коммитом или нет? Начинать её сначала или данные уже зафиксировались?
В моём случае - начинать сначала. Разве может быть ситуация, что транзакция прошла успешно, но во время выполнения выпала ошибка "сервер не доступен"?
0
Эксперт .NET
 Аватар для Usaga
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,137
02.07.2019, 08:23
Цитата Сообщение от serg4242 Посмотреть сообщение
Разве может быть ситуация, что транзакция прошла успешно, но во время выполнения выпала ошибка "сервер не доступен"?
Речь о моменте отправки на сервер команды TRAN COMMIT (может быть не вами лично, силами ADO.NET) и перывания связи в этот момент. И хз, дошло до СУБД или нет. Успело всё зафиксироваться или откатилось... Неопределённая ситуация.

Просто говорите пользователю как есть: текст исключения перед мордой (что именно в нём, разбираться не надо, кроме случая с дедлоком). Чем сильнее его будут бесить такие сообщения, тем больше усилий он приложит, чтобы исправить вашу сеть (хотя бы методом заклёвывания админа).

А какие-то молчаливые перезапуски транзакции - тупо маскировка проблемы. Тем более, что это почти бесполезное занятие. Если сеть\сервер упала, то это не на секунду. И что? Ваше приложение в цикле долбиться в сеть будет показывая пользователю вечный прогресс бар? Тогда это будет выглядеть как затуп вашего приложения (с точки зрения пользователя).

Лечите причину, а не маскируйте последствия.
0
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
02.07.2019, 09:04  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Речь о моменте отправки на сервер команды TRAN COMMIT (может быть не вами лично, силами ADO.NET) и перывания связи в этот момент. И хз, дошло до СУБД или нет.
Если произошло исключение "Невозвожно соединиться с БД", то команда совершенно точно не отправлена, разве нет?

Цитата Сообщение от Usaga Посмотреть сообщение
А какие-то молчаливые перезапуски транзакции - тупо маскировка проблемы. Тем более, что это почти бесполезное занятие. Если сеть\сервер упала, то это не на секунду. И что? Ваше приложение в цикле долбиться в сеть будет показывая пользователю вечный прогресс бар? Тогда это будет выглядеть как затуп вашего приложения (с точки зрения пользователя).
Без БД приложение всё равно бесполезно. А пользователь в случае простого сообщения об ошибке продолжает пытаться выполнить оперецию и т.п.

Как Вам такой вариант:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Save()
{
    Execute(document.Save());
}
 
delegate void Function();
 
void Execute(Function function)
{
    try
    {
        function?.Invoke();
    }
    catch(MySqlException exception)
    {
        if(exception.Number == 1042)
        {
            PingDBForm dbf = new PingDBForm();
            if (dbf.ShowDialog() == DialogResult.OK)
                Execute(function);
        }
    }
}
0
Эксперт .NET
 Аватар для Usaga
14129 / 9349 / 1350
Регистрация: 21.01.2016
Сообщений: 35,137
02.07.2019, 09:18
Цитата Сообщение от serg4242 Посмотреть сообщение
Если произошло исключение "Невозвожно соединиться с БД", то команда совершенно точно не отправлена, разве нет?
Да, но о получении нам подтверждения не пришло (на уровне протокола связи TCP). Поэтому неизвестно, получил команду сервер или нет.

Цитата Сообщение от serg4242 Посмотреть сообщение
Без БД приложение всё равно бесполезно. А пользователь в случае простого сообщения об ошибке продолжает пытаться выполнить оперецию и т.п.
Значит снова получит тоже самое сообщение, а данные, возможно, потеряет.

Цитата Сообщение от serg4242 Посмотреть сообщение
Как Вам такой вариант:
Фигово. Рекурсия и лишний код. Я вам рекомендую ничего не делать. По-хорошему, подключение к базе должно выполняться как реакция на какое-то действие пользователя. Если такое действие - "Сохранить", то ему будет достаточно показать сообщение с текстом исключения и всё. Ведь, если он захочет повторить, то он просто повторит ранее совершённое действие. К примеру, снова нажмёт "Сохранить". Ненужны никакие диалоговые окна, которые ему будут предлагать действие повторить.

Естественно, что по завершению действия, подключение должно закрываться.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2019, 09:18
Помогаю со студенческими работами здесь

Нет соединения с сервером
1 компьютер имеет ip 192.168.0.1 2 компьютер имеет ip 192.168.0.2 сервер ip 192.168.0.101 делаю ping 192.168.0.101 из...

Нет соединения с сервером
у меня следующая проблема. на моём компе клиент спокойно подключается и по локальному ip, и по интернет ip к серверу. всё работает, как...

Нет RDP соединения с сервером
На удаленном офисе после отключения электроэнергии машины перестали ходить на удаленный сервер по RDP. Хотя с инетом все нормально. Порты...

Нет соединения с DNS сервером
Создал сеть, в которой подключил сервер через роутер к компьютеру, сам сервер пингуется, пакеты доставляются штатно, но ни попытки зайти на...

Нет соединения со связанным сервером
Создал сервер, а при попытке выборки данных с него получаются такие ошибки, помогите кто чем хочет


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru