Manipulando exceções SMOHandling SMO Exceptions

ESTE TÓPICO APLICA-SE AO: simSQL ServersimBanco de Dados SQL do AzuresimSQL Data Warehouse do Azure nãoParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse noParallel Data Warehouse

No código gerenciado, as exceções são geradas quando ocorre um erro.In managed code, exceptions are thrown when an error occurs. Os métodos e propriedades do SMO não informam êxito ou falha no valor de retorno.SMO methods and properties do not report success or failure in the return value. Em vez disso, as exceções podem ser capturadas e manipuladas por um manipulador de exceções.Instead, exceptions can be caught and handled by an exception handler.

Existem classes diferentes de exceção no SMO.Different exception classes exist in the SMO. As informações sobre a exceção podem ser obtidas das propriedades de exceção, como a propriedade Message , que fornece uma mensagem de texto sobre a exceção.Information about the exception can be extracted from the exception properties such as the Message property that gives a text message about the exception.

As instruções que manipulam exceção são específicas da linguagem de programação.The exception handling statements are specific to the programming language. Por exemplo, em MicrosoftMicrosoft Visual Basic é a Catch instrução.For example, in MicrosoftMicrosoft Visual Basic it is the Catch statement.

Exceções internasInner Exceptions

As exceções podem ser gerais ou específicas.Exceptions can either be general or specific. As exceções gerais contêm um conjunto de exceções específicas.General exceptions contain a set of specific exceptions. Várias instruções Catch podem ser usadas para tratar erros antecipados e deixar os erros restantes sem solução no código geral de manipulação de exceção.Several Catch statements can be used to handle anticipated errors and let remaining errors fall through to general exception handling code. Normalmente, as exceções ocorrem em uma sequência em cascata.Exceptions often occur in a cascading sequence. Com frequência, a exceção do SMO é causada por uma exceção SQL.Frequently, an SMO exception might have been caused by an SQL exception. Para detectar isso, use a propriedade InnerException sucessivamente para determinar a exceção original que causou a exceção final de nível superior.The way to detect this is to use the InnerException property successively to determine the original exception that caused the final, top-level exception.

Observação

O SQLException exceção for declarada no SqlClient namespace.The SQLException exception is declared in the System.Data.SqlClient namespace.

Um diagrama que mostra os níveis da qual uma exceçãoA diagram that shows the levels from which an excp

O diagrama mostra o fluxo de exceções pelas camadas do aplicativo.The diagram shows the flow of exceptions through the layers of the application.

ExemploExample

Para usar qualquer exemplo de código fornecido, será necessário escolher o ambiente de programação, o modelo de programação e a linguagem de programação para criar o aplicativo.To use any code example that is provided, you will have to choose the programming environment, the programming template, and the programming language in which to create your application. Para obter mais informações, consulte criar um Visual C # Projeto SMO no Visual Studio .NET.For more information, see Create a Visual C# SMO Project in Visual Studio .NET.

Capturando uma exceção no Visual BasicCatching an Exception in Visual Basic

Este exemplo de código mostra como usar o tente... Catch... Por fim Visual BasicVisual Basic instrução para capturar uma exceção de SMO.This code example shows how to use the Try…Catch…Finally Visual BasicVisual Basic statement to catch a SMO exception. Todas as exceções do SMO têm o tipo SmoException e estão listadas na referência de SMO.All SMO exceptions have the type SmoException, and are listed in the SMO reference. A sequência de exceções internas é exibida para mostrar a raiz do erro.The sequence of inner exceptions is displayed to show the root of the error. Para obter mais informações, consulte a documentação do Visual BasicVisual Basic .NET.For more information, see the Visual BasicVisual Basic .NET documentation.

'This sample requires the Microsoft.SqlServer.Management.Smo.Agent namespace is included.
'Connect to the local, default instance of SQL Server.
Dim srv As Server
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.
Dim op As [Operator]
op = New [Operator](srv.JobServer, "Test_Operator")
op.Create()
'Start exception handling.
Try
    'Create the operator again to cause an SMO exception.
    Dim opx As OperatorCategory
    opx = New OperatorCategory(srv.JobServer, "Test_Operator")
    opx.Create()
    'Catch the SMO exception
Catch smoex As SmoException
    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.
    Dim ex As Exception
    ex = smoex.InnerException
    Do While ex.InnerException IsNot (Nothing)
        Console.WriteLine(ex.InnerException.Message)
        ex = ex.InnerException
    Loop
    'Catch other non-SMO exceptions.
Catch ex As Exception
    Console.WriteLine("This is not an SMO exception.")
End Try

Capturando uma exceção no Visual C#Catching an Exception in Visual C#

Este exemplo de código mostra como usar a instrução Visual C# Try…Catch…Finally para capturar uma exceção do SMO.This code example shows how to use the Try…Catch…Finally Visual C# statement to catch a SMO exception. Todas as exceções do SMO têm o tipo SmoException e estão listadas na referência de SMO.All SMO exceptions have the type SmoException, and are listed in the SMO reference. A sequência de exceções internas é exibida para mostrar a raiz do erro.The sequence of inner exceptions is displayed to show the root of the error. Para obter mais informações, consulte a documentação do Visual C#.For more information, see the Visual C# documentation.

{   
//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.");   
}   
}