Обработка исключений
Термин «исключение» обозначает ситуацию, которая может возникать во время выполнения клиентского приложения и которую трудно, а порой и вообще невозможно, предусмотреть во время программирования приложения. Например, попытка подключения к ЛИНТЕР-серверу, который не существует, попытка открытия поврежденного файла или попытка установить связь с компьютером, который находится в автономном режиме. В каждом из этих случаев программист (и конечный пользователь) мало что может сделать с подобными исключительными обстоятельствами.
В подобных случаях CLR будет часто автоматически генерировать соответствующее исключение с описанием текущей проблемы. В классах ADO.NET-провайдера определено множество различных исключений, таких, как IndexOutOfRangeException, FileNotFoundException, ArgumentOutOfRangeException и т.д.
Для обработки исключений используется блок операторов try… catch, который позволяет перехватывать предопределенные ошибочные условия и выполнять соответствующие действия.
Исключения реализованы в виде классов, и если блоки перехвата ожидают появления исключений базового класса до возникновения специфического унаследованного исключения, то это специфическое исключение перехватить не получится.
Исключение содержит читабельное описание проблемы, а также детальный снимок стека вызовов на момент, когда изначально возникло исключение. Более того, конечному пользователю можно предоставлять справочную ссылку, которая указывает на определенный URL-адрес с описанием деталей ошибки, а также специальные данные, определенные программистом.
Обработка исключений подразумевает использование следующих связанных между собой сущностей:
-
тип класса, который представляет детали исключения;
-
член класса, способный генерировать (throw) в вызывающем коде экземпляр класса исключения при соответствующих обстоятельствах;
-
блок кода на вызывающей стороне, ответственный за обращение к члену, в котором может произойти исключение;
-
блок кода на вызывающей стороне, который будет обрабатывать (или перехватывать (catch)) исключение в случае его возникновения.
Примечание
Полный список сообщений LinterSqlException и рекомендации по устранению ошибок см. в документе «Справочник кодов завершения».
Пример обработки исключений
// C# using System; using System.Data.LinterClient; class ExceptionSample { static void Main() { string connectionString = "User ID=SYSTEM;Password=MANAGER8"; string queryString = "execute SAMPLE_PROCEDURE"; LinterDbConnection connection = null; LinterDbCommand command = null; try { connection = new LinterDbConnection(connectionString); command = new LinterDbCommand(queryString, connection); command.Connection.Open(); command.ExecuteNonQuery(); } catch (LinterSqlException ex) { Console.WriteLine( "Исключение ядра СУБД ЛИНТЕР \n" + "Текст сообщения: " + ex.Message + "\n" + "Код СУБД ЛИНТЕР: " + ex.Number + "\n" + "Код операционной системы: " + ex.LinterSysErrorCode + "\n"); } catch (Exception ex) { Console.WriteLine( "Исключение ADO.NET провайдера \n" + "Тип ошибки: " + ex.GetType() + "\n" + "Сообщение: " + ex.Message + "\n"); } finally { if (connection != null) { connection.Close(); } } } } Результат выполнения примера: Исключение ядра СУБД ЛИНТЕР Текст сообщения: [Linter error] unknown procedure Код СУБД ЛИНТЕР: 2229 Код операционной системы: 1572865