次の方法で共有


SMO 例外の処理

マネージド コードでは、エラーが発生すると例外がスローされます。 SMO のメソッドとプロパティは、戻り値の成功または失敗を報告しません。 代わりに、例外をキャッチし、例外ハンドラーによって処理できます。

SMO には異なる例外クラスが存在します。 例外に関する情報は、例外に関するテキスト メッセージを提供する Message プロパティなどの例外プロパティから抽出できます。

例外処理ステートメントは、プログラミング言語に固有です。 たとえば、Microsoft Visual Basic では、 Catch ステートメントです。

内部例外

例外は、一般的な例外でも、特定の例外でもかまいません。 一般的な例外には、一連の特定の例外が含まれています。 いくつかの Catch ステートメントを使用して、予想されるエラーを処理し、残りのエラーを一般的な例外処理コードに分類できます。 多くの場合、例外はカスケード シーケンスで発生します。 多くの場合、SMO 例外は SQL 例外によって発生している可能性があります。 これを検出する方法は、 InnerException プロパティを連続して使用して、最終的な最上位の例外の原因となった元の例外を特定する方法です。

SQLException例外は、System.Data.SqlClient 名前空間で宣言されています。

excp の元のレベルを示す図。excp の。

この図は、アプリケーションのレイヤーを介した例外のフローを示しています。

提供されているコード例を使用するには、プログラミング環境、プログラミング テンプレート、およびアプリケーションを作成するプログラミング言語を選択する必要があります。 詳細については、「 Visual Studio .NET で Visual C# SMO プロジェクトを作成する」または「Visual Studio .NETで Visual Basic SMO プロジェクトを作成する」を参照してください。

Visual Basic での例外のキャッチ

このコード例では、 Try...Catch...FinallyVisual Basic ステートメントを使用して SMO 例外をキャッチする方法を示します。 すべての SMO 例外には SmoException 型があり、SMO リファレンスに記載されています。 エラーのルートを示すために、内部例外のシーケンスが表示されます。 詳細については、Visual Basic .NET のドキュメントを参照してください。

Visual C での例外のキャッチ#

このコード例では、 Try...Catch...Finally Visual C# ステートメントを使用して SMO 例外をキャッチする方法を示します。 すべての SMO 例外には SmoException 型があり、SMO リファレンスに記載されています。 エラーのルートを示すために、内部例外のシーケンスが表示されます。 詳細については、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.");   
}   
}