Freigeben über


Umgang mit SMO-Ausnahmen

In verwaltetem Code werden Ausnahmen ausgelöst, wenn ein Fehler auftritt. SMO-Methoden und -Eigenschaften melden keinen Erfolg oder Fehler im Rückgabewert. Stattdessen können Ausnahmen von einem Ausnahmehandler abgefangen und behandelt werden.

In der SMO sind unterschiedliche Ausnahmeklassen vorhanden. Informationen zur Ausnahme können aus den Ausnahmeeigenschaften extrahiert werden, z. B. aus der Eigenschaft, die Message eine Sms über die Ausnahme angibt.

Die Ausnahmebehandlungsanweisungen sind spezifisch für die Programmiersprache. In Microsoft Visual Basic ist dies beispielsweise die Catch Anweisung.

Innere Ausnahmen

Ausnahmen können entweder allgemein oder spezifisch sein. Allgemeine Ausnahmen enthalten eine Reihe bestimmter Ausnahmen. Mehrere Catch Anweisungen können verwendet werden, um erwartete Fehler zu behandeln und restfehler in den allgemeinen Ausnahmebehandlungscode zu fallen lassen. Ausnahmen treten häufig in einer kaskadierenden Sequenz auf. Häufig wurde eine SMO-Ausnahme möglicherweise durch eine SQL-Ausnahme verursacht. Die Möglichkeit, dies zu erkennen, besteht darin, die InnerException Eigenschaft nacheinander zu verwenden, um die ursprüngliche Ausnahme zu ermitteln, die die endgültige Ausnahme auf oberster Ebene verursacht hat.

Hinweis

Die SQLException Ausnahme wird im System.Data.SqlClient-Namespace deklariert.

Ein Diagramm, das die Ebenen zeigt, aus denen ein Excp

Das Diagramm zeigt den Ablauf von Ausnahmen über die Ebenen der Anwendung.

Beispiel

Um ein codebeispiel zu verwenden, das bereitgestellt wird, müssen Sie die Programmierumgebung, die Programmiervorlage und die Programmiersprache auswählen, in der Ihre Anwendung erstellt werden soll. Weitere Informationen finden Sie unter Erstellen eines Visual C#-SMO-Projekts in Visual Studio .NET oder Erstellen eines Visual Basic-SMO-Projekts in Visual Studio .NET.

Abfangen einer Ausnahme in Visual Basic

In diesem Codebeispiel wird gezeigt, wie Sie mithilfe der Try...Catch...FinallyVisual Basic-Anweisung eine SMO-Ausnahme abfangen. Alle SMO-Ausnahmen weisen den Typ SmoException auf und werden in der SMO-Referenz aufgeführt. Die Abfolge der inneren Ausnahmen wird angezeigt, um den Stamm des Fehlers anzuzeigen. Weitere Informationen finden Sie in der Visual Basic .NET-Dokumentation.

Abfangen einer Ausnahme in Visual C#

In diesem Codebeispiel wird gezeigt, wie Sie die Try...Catch...Finally Visual C#-Anweisung verwenden, um eine SMO-Ausnahme abzufangen. Alle SMO-Ausnahmen weisen den Typ SmoException auf und werden in der SMO-Referenz aufgeführt. Die Abfolge der inneren Ausnahmen wird angezeigt, um den Stamm des Fehlers anzuzeigen. Weitere Informationen finden Sie in der Visual C#-Dokumentation.

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