Behandeln von SMO-AusnahmenHandling SMO Exceptions

DIESES THEMA GILT FÜR: jaSQL Server jaAzure SQL-DatenbankjaAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse noParallel Data Warehouse

In verwaltetem Code werden Ausnahmen ausgelöst, wenn ein Fehler auftritt.In managed code, exceptions are thrown when an error occurs. SMO-Methoden und -Eigenschaften melden keinen Erfolg oder Fehler mit dem Rückgabewert.SMO methods and properties do not report success or failure in the return value. Stattdessen können Ausnahmen von einem Ausnahmehandler abgefangen und behandelt werden.Instead, exceptions can be caught and handled by an exception handler.

In SMO sind verschiedene Ausnahmeklassen vorhanden.Different exception classes exist in the SMO. Informationen über die Ausnahme können aus den Ausnahmeeigenschaften wie der Message -Eigenschaft, die eine Textmeldung über die Ausnahme angibt, extrahiert werden.Information about the exception can be extracted from the exception properties such as the Message property that gives a text message about the exception.

Die Ausnahmebehandlungsanweisungen sind für die Programmiersprache spezifisch.The exception handling statements are specific to the programming language. Beispielsweise ist in MicrosoftMicrosoft Visual Basic gibt es die Catch Anweisung.For example, in MicrosoftMicrosoft Visual Basic it is the Catch statement.

Interne AusnahmenInner Exceptions

Ausnahmen können entweder allgemein oder spezifisch sein.Exceptions can either be general or specific. Allgemeine Ausnahmen enthalten einen Satz spezifischer Ausnahmen.General exceptions contain a set of specific exceptions. Einige Catch -Anweisungen können dazu verwendet werden, erwartete Fehler zu behandeln und die übrigen Fehler an den allgemeinen Ausnahmebehandlungscode weiterzugeben.Several Catch statements can be used to handle anticipated errors and let remaining errors fall through to general exception handling code. Ausnahmen treten oft in einer überlappenden Sequenz auf.Exceptions often occur in a cascading sequence. Häufig wird eine SMO-Ausnahme von einer SQL-Ausnahme verursacht.Frequently, an SMO exception might have been caused by an SQL exception. Um dies zu ermitteln, wird die InnerException -Eigenschaft nacheinander verwendet. So wird die ursprüngliche Ausnahme bestimmt, die die letzte Ausnahme auf oberster Ebene ausgelöst hat.The way to detect this is to use the InnerException property successively to determine the original exception that caused the final, top-level exception.

Hinweis

Die SQLException Ausnahme wird deklariert, der System.Data.SqlClient Namespace.The SQLException exception is declared in the System.Data.SqlClient namespace.

Ein Diagramm, das zeigt, die Ebenen aus dem ausnahmeflussebenenA diagram that shows the levels from which an excp

Die Abbildung zeigt den Verlauf der Ausnahmen durch die Anwendungsebenen.The diagram shows the flow of exceptions through the layers of the application.

BeispielExample

Zum Verwenden eines angegebenen Codebeispiels müssen Sie die Programmierumgebung, Programmiervorlage und die zu verwendende Programmiersprache auswählen, um Ihre Anwendung zu erstellen.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. Weitere Informationen finden Sie unter Erstellen eines Visual C# SMO-Projekts in Visual Studio .NET.For more information, see Create a Visual C# SMO Project in Visual Studio .NET.

Abfangen einer Ausnahme in Visual BasicCatching an Exception in Visual Basic

Dieses Codebeispiel zeigt, wie Sie die versuchen... Catch... Schließlich Visual BasicVisual Basic Anweisung um eine SMO-Ausnahme abzufangen.This code example shows how to use the Try…Catch…Finally Visual BasicVisual Basic statement to catch a SMO exception. Alle SMO-Ausnahmen haben den Typ SmoException und werden im SMO-Verweis aufgelistet.All SMO exceptions have the type SmoException, and are listed in the SMO reference. Die Sequenz von internen Ausnahmen wird angezeigt, um den Ursprung des Fehlers anzugeben.The sequence of inner exceptions is displayed to show the root of the error. Weitere Informationen finden Sie in der Dokumentation zu 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

Abfangen einer Ausnahme in Visual C#Catching an Exception in Visual C#

In diesem Codebeispiel wird gezeigt, wie die Visual C#-Anweisung Try…Catch…Finally verwendet wird, um eine SMO-Ausnahme abzufangen.This code example shows how to use the Try…Catch…Finally Visual C# statement to catch a SMO exception. Alle SMO-Ausnahmen haben den Typ SmoException und werden im SMO-Verweis aufgelistet.All SMO exceptions have the type SmoException, and are listed in the SMO reference. Die Sequenz von internen Ausnahmen wird angezeigt, um den Ursprung des Fehlers anzugeben.The sequence of inner exceptions is displayed to show the root of the error. Weitere Informationen finden Sie in der Dokumentation zu 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.");   
}   
}