Compartir a través de


Manejo de excepciones de SMO

En el código administrado, se producen excepciones cuando se produce un error. Los métodos y propiedades de SMO no notifican éxito ni errores en el valor devuelto. En su lugar, un controlador de excepciones puede detectar y controlar las excepciones.

Existen diferentes clases de excepción en SMO. La información sobre la excepción se puede extraer de las propiedades de excepción, como la Message propiedad que proporciona un mensaje de texto sobre la excepción.

Las instrucciones de control de excepciones son específicas del lenguaje de programación. Por ejemplo, en Microsoft Visual Basic es la Catch instrucción .

Excepciones internas

Las excepciones pueden ser generales o específicas. Las excepciones generales contienen un conjunto de excepciones específicas. Se pueden usar varias Catch instrucciones para controlar los errores previstos y permitir que los errores restantes pasen al código general de control de excepciones. Las excepciones a menudo se producen en una secuencia en cascada. Con frecuencia, una excepción de SMO podría haber sido causada por una excepción de SQL. La manera de detectar esto es usar la InnerException propiedad sucesivamente para determinar la excepción original que provocó la excepción final de nivel superior.

Nota:

La SQLException excepción se declara en el espacio de nombres System.Data.SqlClient .

Diagrama que muestra los niveles desde los que un diagrama excp

En el diagrama se muestra el flujo de excepciones a través de las capas de la aplicación.

Ejemplo

Para usar cualquier ejemplo de código que se proporcione, tendrá que elegir el entorno de programación, la plantilla de programación y el lenguaje de programación en el que se va a crear la aplicación. Para obtener más información, vea Crear un proyecto SMO de Visual C# en Visual Studio .NET o Crear un proyecto SMO de Visual Basic en Visual Studio .NET.

Detectar una excepción en Visual Basic

En este ejemplo de código se muestra cómo usar la Try...Catch...Finallyinstrucción de Visual Basic para detectar una excepción de SMO. Todas las excepciones de SMO tienen el tipo SmoException y se muestran en la referencia de SMO. Se muestra la secuencia de excepciones internas para mostrar la raíz del error. Para obtener más información, consulte la documentación de .NET de Visual Basic.

Detectar una excepción en Visual C#

En este ejemplo de código se muestra cómo usar la Try...Catch...Finally instrucción de Visual C# para detectar una excepción de SMO. Todas las excepciones de SMO tienen el tipo SmoException y se muestran en la referencia de SMO. Se muestra la secuencia de excepciones internas para mostrar la raíz del error. Para obtener más información, consulte la documentación de 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.");   
}   
}