Поделиться через


Обработка исключений SMO

В управляемом коде исключения возникают при возникновении ошибки. Методы и свойства SMO не сообщают об успешном выполнении или сбое в возвращаемом значении. Вместо этого исключения можно поймать и обрабатывать обработчиком исключений.

В SMO существуют различные классы исключений. Сведения об исключении можно извлечь из свойств исключения, таких как Message свойство, которое дает текстовое сообщение об исключении.

Инструкции обработки исключений относятся к языку программирования. Например, в Microsoft Visual Basic это Catch инструкция.

Внутренние исключения

Исключения могут быть общими или конкретными. Общие исключения содержат набор определенных исключений. Для обработки ожидаемых ошибок можно использовать несколько Catch инструкций и позволить оставшимся ошибкам пройти до общего кода обработки исключений. Исключения часто происходят в каскадной последовательности. Часто исключение SMO может быть вызвано исключением SQL. Способ обнаружения этого свойства заключается в последовательном использовании InnerException свойства для определения исходного исключения, вызвавшего окончательное исключение верхнего уровня.

Замечание

Исключение SQLException объявляется в пространстве имен System.Data.SqlClient .

Схема, на которой показаны уровни, на которых

На схеме показан поток исключений через слои приложения.

Пример

Чтобы использовать любой приведенный пример кода, необходимо выбрать среду программирования, шаблон программирования и язык программирования, в котором будет создано приложение. Дополнительные сведения см. в статье о создании проекта SMO Visual C# в Visual Studio .NET или создании проекта SMO Visual Basic в Visual Studio .NET.

Перехват исключения в Visual Basic

В этом примере кода показано, как использовать Try...Catch...Finallyинструкцию Visual Basic для перехвата исключения SMO. Все исключения SMO имеют тип SmoException и перечислены в справочнике по SMO. Последовательность внутренних исключений отображается для отображения корня ошибки. Дополнительные сведения см. в документации по .NET Visual Basic.

Перехват исключения в Visual C#

В этом примере кода показано, как использовать инструкцию Try...Catch...Finally Visual C# для перехвата исключения SMO. Все исключения SMO имеют тип SmoException и перечислены в справочнике по SMO. Последовательность внутренних исключений отображается для отображения корня ошибки. Дополнительные сведения см. в документации по Visual C#.

{   
//This sample requires the Microsoft.SqlServer.Management.Smo.Agent namespace to be included.   
//Connect to the local, default instance of SQL Server.   
Server srv;   
srv = new Server();   
//Define an Operator object variable by supplying the parent SQL Agent and the name arguments in the constructor.   
//Note that the Operator type requires [] parenthesis to differentiate it from a Visual Basic key word.   
op = new Operator(srv.JobServer, "Test_Operator");   
op.Create();   
//Start exception handling.   
try {   
    //Create the operator again to cause an SMO exception.   
    OperatorCategory opx;   
    opx = new OperatorCategory(srv.JobServer, "Test_Operator");   
    opx.Create();   
}   
//Catch the SMO exception   
catch (SmoException smoex) {   
    Console.WriteLine("This is an SMO Exception");   
   //Display the SMO exception message.   
   Console.WriteLine(smoex.Message);   
   //Display the sequence of non-SMO exceptions that caused the SMO exception.   
   Exception ex;   
   ex = smoex.InnerException;   
   while (!object.ReferenceEquals(ex.InnerException, (null))) {   
      Console.WriteLine(ex.InnerException.Message);   
      ex = ex.InnerException;   
    }   
    }   
   //Catch other non-SMO exceptions.   
   catch (Exception ex) {   
      Console.WriteLine("This is not an SMO exception.");   
}   
}