2010-10-03 2 views
2

Я понимаю, что нет никакого способа атомарна гарантии:Обработка Интернет Икота соединения и подключение баз данных

if(hasInternet) 
    doDatabaseCall(); 

Однако , что это правильный способ решения проблем с подключением при работе с DBConnection и DbCommand объектов в. NET мир? Я специально интересуюсь объектами MySqlConnection и MySqlCommand, но предполагаю (надеюсь), что его шаблон исключений совпадает с классами SQL Server.

Я бы предположил, что если интернет идет до вызова, conn.Open(), возникает событие MySqlException. Я также предполагаю, что это произойдет, если вы вызовете ExecuteReader или ExecuteNonQuery, и Интернет пойдет вниз.

Я не уверен, потому что документы для объектов MySql не говорят. Объекты SqlServer просто говорят, что это может привести к возникновению SqlException, что означает:

Исключение произошло при выполнении команды по заблокированной строке. Это исключение не создается при использовании Microsoft .NET Framework версии 1.0.

Это не похоже на проблемы с подключением ... Что бы я хотел сделать, это обработать исключение, подождать некоторое время и начать заново. Единственной целью моего приложения является выполнение этих вызовов в базе данных и его запуск на выделенной системе, поэтому повторение навсегда - действительно лучший вариант, который я считаю. Тем не менее, Я хотел бы различать исключения для подключения и другие виды исключений баз данных, возможно ли это?

Я провел некоторое тестирование и, похоже, работает так, как я предполагаю, но работает ли он во всех случаях? Например: команда была успешно отправлена ​​на сервер базы данных, но соединение опускается до или во время возвращения результатов. Если он не работает во всех случаях с краем, мне придется: выполнить команду, запросить требуемое изменение состояния, выполнить следующую команду и т. Д. Важно, чтобы каждая команда проходила.

Я подключаюсь к порту на локальном хосте, который пересылается через SSH на удаленный сервер, если это имеет значение.

ответ

1

Что касается SqlDataProvider:

SqlException исключение имеет несколько свойств, которые дают вам подробную информацию, почему ваша операция не удалась.

Для вашего случая использования свойство «Класс» может быть хорошим выбором. Это байт, указывающий на серьезность исключения.

См: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.class.aspx

Если этого не достаточно конкретно, вы можете проверить, что отдельные ошибки в коллекции Errors.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.errors.aspx

Основываясь на этой информации, вы можете решить, нужно ли повторить.