Partilhar via


Tratamento de Exceções SMO

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados SQL do Azure Synapse Analyticsno Microsoft Fabric

No código gerenciado, as exceções são lançadas quando ocorre um erro. Os métodos e propriedades do SMO não relatam sucesso ou falha no valor de retorno. Em vez disso, as exceções podem ser capturadas e tratadas por um manipulador de exceções.

Existem diferentes classes de exceção no SMO. As informações sobre a exceção podem ser extraídas das propriedades da exceção, como a propriedade Message que fornece uma mensagem de texto sobre a exceção.

As instruções de tratamento de exceção são específicas para a linguagem de programação. Por exemplo, no Microsoft Visual Basic é a instrução Catch .

Exceções Internas

As exceções podem ser gerais ou específicas. As exceções gerais contêm um conjunto de exceções específicas. Várias instruções Catch podem ser usadas para lidar com erros antecipados e permitir que os erros restantes caiam no código geral de tratamento de exceções. As exceções geralmente ocorrem em uma sequência em cascata. Frequentemente, uma exceção SMO pode ter sido causada por uma exceção SQL. A maneira de detetar isso é usar a propriedade InnerException sucessivamente para determinar a exceção original que causou a exceção final de nível superior.

Note

A exceção SQLException é declarada no namespace System.Data.SqlClient .

Um diagrama que mostra os níveis a partir dos quais um diagrama excp

O diagrama mostra o fluxo de exceções através das camadas do aplicativo.

Example

Para usar qualquer exemplo de código fornecido, você terá que escolher o ambiente de programação, o modelo de programação e a linguagem de programação na qual criar seu aplicativo. Para obter mais informações, consulte Criar um projeto SMO do Visual C# no Visual Studio .NET.

Capturando uma exceção no Visual Basic

Este exemplo de código mostra como usar o Try... Pegar... Finalmente,instrução Visual Basic para capturar uma exceção SMO. Todas as exceções SMO têm o tipo SmoException e estão listadas na referência SMO. A sequência de exceções internas é exibida para mostrar a raiz do erro. Para obter mais informações, consulte a documentação do Visual Basic .NET.

'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#

Este exemplo de código mostra como usar o Try... Pegar... Finalmente, instrução Visual C# para capturar uma exceção SMO. Todas as exceções SMO têm o tipo SmoException e estão listadas na referência SMO. A sequência de exceções internas é exibida para mostrar a raiz do erro. Para obter mais informações, consulte a documentação do 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.");   
}   
}