2013-06-06 4 views
2

В C# я могу уловить все ошибки о (не) подключении к базе данных Oracle?C# oracle: поймать все исключения относительно подключения?

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

Если запросы плохо написаны (или таблица отсутствует), то это моя вина. Но если Oracle или сеть не работает, это должно быть проведено другим отделом.

ответ

1

Написать свой код, в котором вы строите соединение в попытке поймать часть:

try 
{ 
    BuildConnection(connectionString); 
} 
catch (OracleException ex) 
{ 
    //Connectivity Error 
} 
+0

Я сам не создаю соединение, но я делегирую его объекту, который может потерпеть неудачу (и это вернет основную ошибку). – frenchone

0

Sure - вы можете поймать определенные типы исключений, или, если они все же тип исключения, вы можете поймать его , проверьте, не является ли он конкретным типом, и повторно бросайте те, которые вы не хотите обрабатывать. Не имея свой синтаксис, вот пример ...

try 
{ 
    // your Oracle code 
} 
catch (OracleException ex) 
{ 
    if (ex.Message == "Something you don't want caught") 
    { 
     throw; 
    } 
    else 
    { 
     // handle 
    } 
} 
+1

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

+0

Да, это правда. – Deeko

1

Простой ответ на этот тип проблемы использования Try Catch Блок как

try 
{ 
    // your code 
} 
catch (OracleException ex) 
{ 

} 

MSDN HELP

+0

Я не хочу улавливать все исключения Oracle только те, которые связаны с недоступностью базы данных. – frenchone

0

ошибок, как Нет слушателя, соединение потеряно в все еще попадаются в System.Data.SqlClient.SqlException, однако вы можете проверить ErrorCode и Errors для обработки различных ситуаций соответственно, скажем, не прослушивателя или потерянного соединения и т. д.

MSDN, похоже, не документирует все возможные ошибки, однако вы можете написать несколько модульных тестов или тестов интеграции, чтобы узнать, что появляется в ErrorCode и Errors, а затем написать обработчики ошибок в производственных кодах соответственно.

OracleException содержит только ErrorCode, а не ошибки. Таким образом, вы можете использовать переключатель (e.ErrorCode) для обработки различных ситуаций.

+1

Неверно проверять сообщение об ошибке, поскольку сообщение может быть изменено в следующем выпуске/исправлении .NET framework. Всегда используйте ErrorCode. – ZZZ

Смежные вопросы