Obsługa wyjątków SMO
W kod zarządzany, wyjątki są generowane, gdy wystąpi błąd.SMO metod i właściwości zgłasza sukces lub Niepowodzenie w wartości zwracanej.Natomiast wyjątki można złowionych i obsługiwane przez program obsługi wyjątków.
Istnieje wyjątek różnych klas w SMO.Informacji o wyjątku można wyodrębnić z wyjątkiem właściwości takich jak Message właściwość, która zapewnia tekst komunikat o wyjątku.
Instrukcje obsługi wyjątków są specyficzne dla języka programowania.Na przykład w Microsoft programu Visual Basic jest Catch instrukcja.
Wewnętrzne wyjątki
Wyjątki mogą być ogólne lub szczególne.Wyjątki ogólne zawierają zestaw określonych wyjątków.Kilka Catch sprawozdań może służyć do obsługi błędów przewidywanych i pozwolić, aby pozostały poniżej błędy ogólne wyjątku obsługi kodu.Wyjątki są często występują w sekwencji kaskadowych.Często wyjątek SMO może być spowodowane wyjątek SQL.Sposobem na wykrywać to użyj InnerException Właściwość kolejno do określenia oryginalnego wyjątek, który spowodował wyjątek końcowym, najwyższego poziom.
Ostrzeżenie
SQLException Wyjątek jest zadeklarowany w System.Data.SqlClient obszaru nazw.
Na diagramie przedstawiono przepływu wyjątki za pośrednictwem warstwy aplikacji.
Przykład
Aby używać dostarczonych przykładów kodu źródłowego, należy wybrać środowisko, szablon oraz język programowania, które będą używane do tworzenia aplikacji.Aby uzyskać więcej informacji, zobacz [Howto:CreateaVisualBasicSMOProjectinVisualStudio.NET]Jak Tworzenie projektu SMO Visual Basic w programie Visual Studio.NET lub [Howto:CreateaVisualC#SMOProjectinVisualStudio.NET]Jak Tworzenie projektu programu Visual C# SMO w programie Visual Studio.NET.
Przechwytywanie wyjątku w języku Visual Basic
Poniższy przykład kodu ilustruje sposób użycia Try…Catch…Finally Visual Basic instrukcja do połowu z wyjątkiem obiektów SMO.Wszystkie wyjątki SMO typ SmoException i są wymienione w odwołaniu SMO.Do głównych błędu Pokaż wyświetlany jest sekwencji wewnętrzne wyjątki.Aby uzyskać więcej informacji, zobacz Visual Basic .Dokumentacja netto.
'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
Przechwytywanie wyjątku w środowisku Visual C#
Poniższy przykład kodu ilustruje sposób użycia Try…Catch…Finally Visual C# instrukcja do połowu wyjątek SMO.Wszystkie wyjątki SMO typ SmoException i są wymienione w odwołaniu SMO.Do głównych błędu Pokaż wyświetlany jest sekwencji wewnętrzne wyjątki.Aby uzyskać więcej informacji zobacz dokumentację 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.");
}
}