Manipulando exceções SMO
No código gerenciado, as exceções são geradas quando ocorre um erro. Os métodos e propriedades do SMO não informam êxito ou falha no valor de retorno. Em vez disso, as exceções podem ser capturadas e manipuladas por um manipulador de exceções.
Existem classes diferentes de exceção no 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.
As instruções que manipulam exceção são específicas da 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 tratar erros antecipados e deixar os erros restantes sem solução no código geral de manipulação de exceção. Normalmente, as exceções ocorrem em uma sequência em cascata. Com frequência, a exceção do SMO é causada por uma exceção SQL. Para detectar isso, use a propriedade InnerException sucessivamente para determinar a exceção original que causou a exceção final de nível superior.
Observação |
---|
A exceção SQLException é declarada no namespace System.Data.SqlClient. |
O diagrama mostra o fluxo de exceções pelas camadas do aplicativo.
Exemplo
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. Para obter mais informações, consulte Criar um projeto SMO do Visual C# no Visual Studio .NET ou Criar um projeto SMO do Visual Basic no Visual Studio .NET.
Capturando uma exceção no Visual Basic
Este exemplo de código mostra como usar a instrução Try…Catch…Finally Visual Basic para capturar uma exceção do SMO. Todas as exceções do SMO têm o tipo SmoException e estão listadas na referência de 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 a instrução Visual C# Try…Catch…Finally para capturar uma exceção do SMO. Todas as exceções do SMO têm o tipo SmoException e estão listadas na referência de 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.");
}
}