SqlException クラス

定義

この例外は、SQL サーバーから警告またはエラーが返された場合にスローされます。The exception that is thrown when SQL Server returns a warning or error. このクラスは継承できません。This class cannot be inherited.

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

次の例ではSqlException 、が生成され、例外が表示されます。The following example generates a SqlException and then displays the exception.

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 がサーバーから生成されたエラーを検出するたびに作成されます。This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. (クライアント側のエラーは、標準の共通言語ランタイム例外としてスローされます)。には、常にのインスタンスSqlErrorが少なくとも1つ含まれています。 SqlException(Client side errors are thrown as standard common language runtime exceptions.) SqlException always contains at least one instance of SqlError.

重大度レベルが10以下のメッセージは情報であり、ユーザーが入力した情報の誤りに起因する問題を示します。Messages that have a severity level of 10 or less are informational and indicate problems caused by mistakes in information that a user has entered. 重大度レベルが 11 ~ 16 の場合、ユーザーによって生成され、ユーザーが修正できます。Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. 重大度レベルが 17 ~ 25 のエラーは、ソフトウェアまたはハードウェアのエラーです。Severity levels from 17 through 25 indicate software or hardware errors. レベル17、18、または19のエラーが発生した場合でも、特定のステートメントを実行できないことがありますが、作業を続行できます。When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.

重大度レベルが 19 以下の場合、SqlConnection は開いたままです。The SqlConnection remains open when the severity level is 19 or less. 重大度レベルが20以上の場合、サーバーは通常、 SqlConnectionを閉じます。When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. ただし、ユーザーは接続を再び開き、続行できます。However, the user can reopen the connection and continue. どちらの場合も、コマンドを実行しているメソッドによって SqlException が生成されます。In both cases, a SqlException is generated by the method executing the command.

SQL Server によって送信される警告メッセージと情報メッセージの詳細については、「イベントとエラーのデータベースエンジン」を参照してください。For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. クラスSqlExceptionは SQL Server 重大度にマップされます。The SqlException class maps to SQL Server severity.

例外処理に関する一般的な情報を次に示します。The following is general information on handling exceptions. コードで例外をキャッチして、アプリケーションがクラッシュするのを防ぎ、関連するエラーメッセージをユーザーに表示できるようにする必要があります。Your code should catch exceptions to prevent the application from crashing and to allow displaying a relevant error message to the user. データベーストランザクションを使用すると、クライアントアプリケーションで何が発生したかに関係なく、データの整合性を保つことができます (クラッシュを含む)。You can use database transactions to ensure that the data is consistent regardless of what happens in the client application (including a crash). BeginTransaction メソッド (OleDbConnection、ODBCConnection、および) などの機能によって、例外に関係なく一貫性のあるデータが確保されるようになっています (、、および)。プロバイダーによって発生します。Features like System.Transaction.TransactionScope or the BeginTransaction method (in System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection, and System.Data.SqlClient.SqlConnection) ensure consistent data regardless of exceptions raised by a provider. トランザクションが失敗する可能性があるため、エラーをキャッチして、トランザクションを再試行してください。Transactions can fail, so catch failures and retry the transaction.

.NET Framework 4.5 以降では、 SqlExceptionは内部Win32Exceptionを返すことができることに注意してください。Note that beginning with .NET Framework 4.5, SqlException can return an inner Win32Exception.

.NET Framework データプロバイダーの exception クラスは、プロバイダー固有のエラーを報告します。The exception class of a .NET Framework data provider reports provider-specific errors. たとえば、SqlException には OdbcException があり、system.string には OleDbException が含まれています。また、system.string にはがあります。For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. 最高レベルのエラーの詳細については、これらの例外をキャッチし、これらの例外クラスのメンバーを使用してエラーの詳細を取得します。For the best level of error detail, catch these exceptions and use the members of these exception classes to get details of the error.

プロバイダー固有のエラーに加えて、.NET Framework データプロバイダーの型は、OutOfMemoryException や ThreadAbortException などの例外を .NET Framework 発生させることができます。In addition to the provider-specific errors, .NET Framework data provider types can raise .NET Framework exceptions such as System.OutOfMemoryException and System.Threading.ThreadAbortException. これらの例外からの回復が不可能な場合があります。Recovery from these exceptions may not be possible.

入力が正しくないと、.NET Framework データプロバイダーの型によって ArgumentException や IndexOutOfRangeException などの例外が発生する可能性があります。Bad input can cause a .NET Framework data provider type to raise an exception such as System.ArgumentException or System.IndexOutOfRangeException. 間違った時刻にメソッドを呼び出すと、InvalidOperationException が発生する可能性があります。Calling a method at the wrong time can raise System.InvalidOperationException.

そのため、一般に、共通言語ランタイムの例外だけでなく、プロバイダー固有の例外をキャッチする例外ハンドラーを記述します。So, in general, write an exception handler that catches any provider specific exceptions as well as exceptions from the common language runtime. 次のように階層化できます。These can be layered as follows:

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

または:Or:

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

スタックにユーザーコードがないスレッドプールスレッドで、.NET Framework データプロバイダーのメソッド呼び出しが失敗する可能性もあります。It is also possible for a .NET Framework data provider method call to fail on a thread pool thread with no user code on the stack. この場合、および非同期メソッド呼び出しを使用する場合は、イベントをUnhandledException登録してこれらの例外を処理し、アプリケーションのクラッシュを回避する必要があります。In this case, and when using asynchronous method calls, you must register the UnhandledException event to handle those exceptions and avoid application crash.

プロパティ

Class

.NET Framework SQL Server 用データ プロバイダーが返したエラーの重大度レベルを取得します。Gets the severity level of the error returned from the .NET Framework Data Provider for SQL Server.

ClientConnectionId

クライアント接続 ID を表します 。Represents the client connection ID. 詳細については、「ADO.NET のデータ追跡」を参照してください。For more information, see Data Tracing in ADO.NET.

Data

例外に関する追加のユーザー定義情報を提供する、キー/値ペアのコレクションを取得します。Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(継承元 Exception)
Errors

.NET Framework SQL Server 用データ プロバイダーが生成する例外の詳細情報を提供する、1 つ以上の SqlError オブジェクトのコレクションを取得します。Gets a collection of one or more SqlError objects that give detailed information about exceptions generated by the .NET Framework Data Provider for SQL Server.

HelpLink

この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。Gets or sets a link to the help file associated with this exception.

(継承元 Exception)
HResult

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(継承元 Exception)
InnerException

現在の例外の原因となる Exception インスタンスを取得します。Gets the Exception instance that caused the current exception.

(継承元 Exception)
LineNumber

Transact-SQL コマンドのバッチまたはストアド プロシージャ内の、エラーを生成した行の番号を取得します。Gets the line number within the Transact-SQL command batch or stored procedure that generated the error.

Message

エラーを説明するテキストを取得します。Gets the text describing the error.

Number

エラーの種類を示す番号を取得します。Gets a number that identifies the type of error.

Procedure

エラーを生成したストアド プロシージャまたはリモート プロシージャ コール (RPC) の名前を取得します。Gets the name of the stored procedure or remote procedure call (RPC) that generated the error.

Server

エラーを生成した SQL Server インスタンスを実行しているコンピューターの名前を取得します。Gets the name of the computer that is running an instance of SQL Server that generated the error.

Source

エラーを生成したプロバイダーの名前を取得します。Gets the name of the provider that generated the error.

StackTrace

呼び出し履歴で直前のフレームの文字列形式を取得します。Gets a string representation of the immediate frames on the call stack.

(継承元 Exception)
State

エラー、警告、または "データがありません" というメッセージを表す、数字によるエラー コードを SQL Server から取得します。Gets a numeric error code from SQL Server that represents an error, warning or "no data found" message. これらの値のデコード方法について詳しくは、データベース エンジンのイベントとエラーに関するページをご覧ください。For more information about how to decode these values, see Database Engine Events and Errors.

TargetSite

現在の例外がスローされたメソッドを取得します。Gets the method that throws the current exception.

(継承元 Exception)

メソッド

Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(継承元 Object)
GetBaseException()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の主要な原因である Exception を返します。When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(継承元 Exception)
GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

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

例外に関する情報を含む SerializationInfo を設定します。Sets the SerializationInfo with information about the exception.

GetType()

現在のインスタンスのランタイム型を取得します。Gets the runtime type of the current instance.

(継承元 Exception)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

現在の SqlException オブジェクトを表し、クライアント接続 ID を含む文字列を返します (詳細については、 ClientConnectionId を参照してください)。Returns a string that represents the current SqlException object, and includes the client connection ID (for more information, see ClientConnectionId).

イベント

SerializeObjectState

例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(継承元 Exception)

適用対象

こちらもご覧ください