SqlException クラス

定義

この例外は、SQL サーバーから警告またはエラーが返された場合にスローされます。 このクラスは継承できません。

public ref class SqlException sealed : System::Data::Common::DbException
public ref class SqlException sealed : SystemException
public sealed class SqlException : System.Data.Common.DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
    inherit DbException
[<System.Serializable>]
type SqlException = class
    inherit SystemException
[<System.Serializable>]
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Public NotInheritable Class SqlException
Inherits SystemException
継承
継承
継承
属性

次の例では、例外を SqlException 生成して表示します。

public static void ShowSqlException(string connectionString)
{
    string queryString = "EXECUTE NonExistantStoredProcedure";
    StringBuilder errorMessages = new StringBuilder();

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        try
        {
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
    }
}
Public Sub ShowSqlException(ByVal connectionString As String)
    Dim queryString As String = "EXECUTE NonExistantStoredProcedure"
    Dim errorMessages As New StringBuilder()

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)

        Try
            command.Connection.Open()
            command.ExecuteNonQuery()

        Catch ex As SqlException
            Dim i As Integer
            For i = 0 To ex.Errors.Count - 1
                errorMessages.Append("Index #" & i.ToString() & ControlChars.NewLine _
                    & "Message: " & ex.Errors(i).Message & ControlChars.NewLine _
                    & "LineNumber: " & ex.Errors(i).LineNumber & ControlChars.NewLine _
                    & "Source: " & ex.Errors(i).Source & ControlChars.NewLine _
                    & "Procedure: " & ex.Errors(i).Procedure & ControlChars.NewLine)
            Next i
            Console.WriteLine(errorMessages.ToString())
        End Try
    End Using
End Sub

注釈

このクラスは、SQL Serverの.NET Framework Data Providerでサーバーから生成されたエラーが発生するたびに作成されます。 (クライアント側のエラーは、標準の共通言語ランタイム例外としてスローされます)。 SqlException 常に少なくとも 1 つのインスタンスが SqlError含まれています。

重大度レベルが 10 以下のメッセージは情報であり、ユーザーが入力した情報の誤りによって発生した問題を示します。 11 ~ 16 の重大度レベルはユーザーによって生成され、ユーザーが修正できます。 重大度レベルが 17 ~ 25 のエラーは、ソフトウェアまたはハードウェアのエラーです。 レベル 17、18、または 19 のエラーが発生した場合は、特定のステートメントを実行できない可能性がありますが、作業を続行できます。

重大度レベルが 19 以下の場合、SqlConnection は開いたままです。 重大度レベルが 20 以上の場合、通常 SqlConnection、サーバーは . ただし、ユーザーは接続を再び開き、続行できます。 どちらの場合も、コマンドを実行しているメソッドによって SqlException が生成されます。

SQL Serverによって送信される警告メッセージと情報メッセージについては、「データベース エンジンイベントとエラー」を参照してください。 クラスはSqlExceptionSQL Server重大度にマップされます。

例外の処理に関する一般的な情報を次に示します。 アプリケーションのクラッシュを防ぎ、関連するエラー メッセージをユーザーに表示できるようにするために、コードで例外をキャッチする必要があります。 データベース トランザクションを使用して、クライアント アプリケーションで何が起こるかに関係なくデータの一貫性を確保できます (クラッシュを含む)。 System.Transaction.TransactionScope や BeginTransaction メソッド (System.Data.OleDb.OleDbConnection、System.Data.ODBC.ODBCConnection、System.Data.SqlClient.SqlConnection) などの機能は、プロバイダーによって発生する例外に関係なく、データの一貫性を確保します。 トランザクションは失敗する可能性があるため、失敗をキャッチしてトランザクションを再試行します。

.NET Framework 4.5 以降では、SqlException内部Win32Exceptionを返すことができます。

.NET Framework データ プロバイダーの例外クラスは、プロバイダー固有のエラーを報告します。 たとえば、System.Data.Odbc には OdbcException、System.Data.OleDb には OleDbException、System.Data.SqlClient には SqlException があります。 エラーの詳細の最適なレベルについては、これらの例外をキャッチし、これらの例外クラスのメンバーを使用してエラーの詳細を取得します。

プロバイダー固有のエラーに加えて、.NET Frameworkデータ プロバイダーの種類では、System.OutOfMemoryException や System.Threading.ThreadAbortException などの.NET Framework例外が発生する可能性があります。 これらの例外からの復旧が不可能な場合があります。

入力が正しくないと、.NET Framework データ プロバイダーの型で System.ArgumentException や System.IndexOutOfRangeException などの例外が発生する可能性があります。 間違ったタイミングでメソッドを呼び出すと、System.InvalidOperationException が発生する可能性があります。

そのため、一般に、プロバイダー固有の例外と共通言語ランタイムからの例外をキャッチする例外ハンドラーを記述します。 これらは、次のように階層化できます。

try {  
   // code here  
}  
catch (SqlException odbcEx) {  
   // Handle more specific SqlException exception here.  
}  
catch (Exception ex) {  
   // Handle generic ones here.  
}  

または:

try {  
   // code here  
}  
catch (Exception ex) {  
   if (ex is SqlException) {  
      // Handle more specific SqlException exception here.  
   }  
   else {  
      // Handle generic ones here.  
   }  
}  

また、.NET Framework データ プロバイダー メソッドの呼び出しが、スタック上のユーザー コードのないスレッド プール スレッドで失敗する可能性もあります。 この場合、非同期メソッド呼び出しを使用する場合は、これらの例外を処理し、アプリケーションの UnhandledException クラッシュを回避するためにイベントを登録する必要があります。

プロパティ

BatchCommand

これが DbException 実行時にスローされた場合は、 DbBatch例外をトリガーした特定 DbBatchCommand のオブジェクトを参照します。

(継承元 DbException)
Class

.NET Framework SQL Server 用データ プロバイダーが返したエラーの重大度レベルを取得します。

ClientConnectionId

クライアント接続 ID を表します 。 詳細については、「ADO.NET のデータ追跡」を参照してください。

Data

例外に関する追加のユーザー定義情報を提供する、キーと値のペアのコレクションを取得します。

(継承元 Exception)
DbBatchCommand

派生クラスでオーバーライドされた場合、例外の実行時にこれが DbException スローされた場合は DbBatch、例外をトリガーした特定 DbBatchCommand のクラスを参照します。

(継承元 DbException)
ErrorCode

エラーの HRESULT を取得します。

(継承元 ExternalException)
Errors

.NET Framework SQL Server 用データ プロバイダーが生成する例外の詳細情報を提供する、1 つ以上の SqlError オブジェクトのコレクションを取得します。

HelpLink

この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。

(継承元 Exception)
HResult

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。

(継承元 Exception)
InnerException

現在の例外の原因となる Exception インスタンスを取得します。

(継承元 Exception)
IsTransient

この DbException によって表されるエラーが一時的なエラーである可能性があるかどうか、つまり他に何も変更せずにトリガー操作を再試行しても成功する可能性があるかどうかを示します。

(継承元 DbException)
LineNumber

Transact-SQL コマンドのバッチまたはストアド プロシージャ内の、エラーを生成した行の番号を取得します。

Message

エラーを説明するテキストを取得します。

Message

現在の例外を説明するメッセージを取得します。

(継承元 Exception)
Number

エラーの種類を示す番号を取得します。

Procedure

エラーを生成したストアド プロシージャまたはリモート プロシージャ コール (RPC) の名前を取得します。

Server

エラーを生成した SQL Server インスタンスを実行しているコンピューターの名前を取得します。

Source

エラーを生成したプロバイダーの名前を取得します。

SqlState

それをサポートしているデータベース プロバイダーの場合、データベース操作の成功または失敗を示す標準的な SQL の 5 文字のリターン コードが含まれます。 最初の 2 文字は、リターン コードのクラス (エラー、成功など) を表します。最後の 3 文字はサブクラスを表し、データベースに移植可能な方法でエラー シナリオを検出できます。

それをサポートしていないデータベース プロバイダーの場合、または該当しないエラー シナリオの場合は、null が含まれます。

(継承元 DbException)
StackTrace

呼び出し履歴で直前のフレームの文字列形式を取得します。

(継承元 Exception)
State

エラー、警告、または "データがありません" というメッセージを表す、数字によるエラー コードを SQL Server から取得します。 これらの値のデコード方法について詳しくは、データベース エンジンのイベントとエラーに関するページをご覧ください。

TargetSite

現在の例外がスローされたメソッドを取得します。

(継承元 Exception)

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetBaseException()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の根本原因である Exception を返します。

(継承元 Exception)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetObjectData(SerializationInfo, StreamingContext)

例外に関する情報を含む SerializationInfo を設定します。

GetObjectData(SerializationInfo, StreamingContext)

派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。

(継承元 Exception)
GetType()

現在のインスタンスのランタイム型を取得します。

(継承元 Exception)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在の SqlException オブジェクトを表し、クライアント接続 ID を含む文字列を返します (詳細については、 ClientConnectionId を参照してください)。

ToString()

エラーの HRESULT が格納された文字列を返します。

(継承元 ExternalException)
ToString()

現在の例外の文字列形式を作成して返します。

(継承元 Exception)

イベント

SerializeObjectState
互換性のために残されています。

例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。

(継承元 Exception)

適用対象

こちらもご覧ください