SqlException SqlException SqlException SqlException Class


この例外は、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
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);
        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");
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)


        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
        End Try
    End Using
End Sub


このクラスは、.NET Framework Data Provider for SQL Server は、サーバーから生成されたエラーを検出するたびに作成されます。This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. (クライアント側のエラーは、標準の共通言語ランタイム例外としてスローされます)。SqlException常に少なくとも 1 つのインスタンスを含むSqlErrorします。(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). System.Transaction.TransactionScope または BeginTransaction メソッド (に System.Data.OleDb.OleDbConnection、System.Data.ODBC.ODBCConnection、および System.Data.SqlClient.SqlConnection) などの機能は、例外に関係なく一貫したデータを確認します。プロバイダーで発生します。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 データ プロバイダーの例外クラスは、プロバイダー固有のエラーを報告します。The exception class of a .NET Framework data provider reports provider-specific errors. たとえば System.Data.Odbc OdbcException、System.Data.OleDb OleDbException であり、System.Data.SqlClient が SqlException。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 データ プロバイダーの種類はプロバイダーに固有のエラーだけでなく、System.OutOfMemoryException System.Threading.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 データ プロバイダーの種類 System.ArgumentException や System.IndexOutOfRangeException など、例外を発生させる可能性があります。Bad input can cause a .NET Framework data provider type to raise an exception such as System.ArgumentException or System.IndexOutOfRangeException. 不適切なタイミングでメソッドを呼び出す System.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.  


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 Class Class Class

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

ClientConnectionId ClientConnectionId ClientConnectionId ClientConnectionId

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

Data Data Data Data

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

(Inherited from Exception)
Errors Errors Errors Errors

1 つまたは複数のコレクションを取得しますSqlErrorfor SQL Server、.NET Framework データ プロバイダーによって生成される例外に関する詳細情報を提供するオブジェクト。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 HelpLink HelpLink HelpLink

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

(Inherited from Exception)
HResult HResult HResult HResult

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

(Inherited from Exception)
InnerException InnerException InnerException InnerException

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

(Inherited from Exception)
LineNumber LineNumber LineNumber LineNumber

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

Message Message Message Message

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

Number Number Number Number

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

Procedure Procedure Procedure Procedure

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

Server Server Server Server

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

Source Source Source Source

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

StackTrace StackTrace StackTrace StackTrace

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

(Inherited from Exception)
State State State 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 TargetSite TargetSite TargetSite

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

(Inherited from Exception)


Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

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

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

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

GetType() GetType() GetType() GetType()

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

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
ToString() ToString() ToString() 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 SerializeObjectState SerializeObjectState SerializeObjectState

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

(Inherited from Exception)