Обработка исключений
Термин «исключение» обозначает ситуацию, которая может возникать во время выполнения клиентского приложения и которую трудно, а порой и вообще невозможно, предусмотреть во время программирования приложения. Например, попытка подключения к ЛИНТЕР-серверу, который не существует, попытка открытия поврежденного файла или попытка установить связь с компьютером, который находится в автономном режиме. В каждом из этих случаев программист (и конечный пользователь) мало что может сделать с подобными исключительными обстоятельствами.
В подобных случаях 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