SqlException クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
SQL Serverが警告またはエラーを返したときにスローされる例外。 このクラスは継承できません。
public ref class SqlException sealed : SystemException
public ref class SqlException sealed : System::Data::Common::DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
inherit SystemException
[<System.Serializable>]
type SqlException = class
inherit DbException
Public NotInheritable Class SqlException
Inherits SystemException
Public NotInheritable Class SqlException
Inherits DbException
- 継承
- 継承
- 属性
例
次の例では、 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
注釈
このクラスは、.NET Framework Data Provider for SQL Serverでサーバーから生成されたエラーが発生するたびに作成されます。 (クライアント側のエラーは、標準の共通言語ランタイム例外としてスローされます)。 SqlException には、常に少なくとも 1 つの SqlErrorインスタンスが含まれます。
重大度レベルが 10 以下のメッセージは情報であり、ユーザーが入力した情報の誤りによる問題を示します。 11 から 16 までの重大度レベルはユーザーによって生成され、ユーザーが修正できます。 重大度レベルが 17 ~ 25 の場合は、ソフトウェアまたはハードウェアのエラーを示します。 レベル 17、18、または 19 のエラーが発生した場合は、特定のステートメントを実行できない場合がありますが、作業を続行できます。
重大度レベルが 19 以下の場合、 SqlConnection は開いたままです。 重大度レベルが 20 以上の場合、サーバーは通常、 SqlConnectionを閉じます。 ただし、ユーザーは接続を再度開いて続行できます。 どちらの場合も、コマンドを実行するメソッドによって SqlException が生成されます。
SQL Serverによって送信される警告メッセージと情報メッセージの詳細については、「データベース エンジン イベントとエラーを参照してください。 SqlException クラスはSQL 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 イベントを登録する必要があります。
プロパティ
| 名前 | 説明 |
|---|---|
| Class |
.NET Framework Data Provider for SQL Server から返されるエラーの重大度レベルを取得します。 |
| ClientConnectionId |
クライアント接続 ID を表します。 詳細については、「 ADO.NET のデータ トレース」を参照してください。 |
| Data |
例外に関する追加のユーザー定義情報を提供するキーと値のペアのコレクションを取得します。 (継承元 Exception) |
| ErrorCode |
エラーの |
| Errors |
SQL Serverの.NET Framework Data Providerによって生成される例外に関する詳細情報を提供する 1 つ以上のSqlError オブジェクトのコレクションを取得します。 |
| HelpLink |
この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。 (継承元 Exception) |
| HResult |
特定の例外に割り当てられるコード化された数値である HRESULT を取得または設定します。 (継承元 Exception) |
| InnerException |
現在の例外の原因となった Exception インスタンスを取得します。 (継承元 Exception) |
| LineNumber |
エラーを生成した Transact-SQL コマンド バッチまたはストアド プロシージャ内の行番号を取得します。 |
| Message |
エラーを説明するテキストを取得します。 |
| Message |
現在の例外を説明するメッセージを取得します。 (継承元 Exception) |
| Number |
エラーの種類を識別する数値を取得します。 |
| Procedure |
エラーを生成したストアド プロシージャまたはリモート プロシージャ 呼び出し (RPC) の名前を取得します。 |
| Server |
エラーを生成した SQL Server のインスタンスを実行しているコンピューターの名前を取得します。 |
| Source |
エラーを生成したプロバイダーの名前を取得します。 |
| StackTrace |
呼び出し履歴のイミディエイト フレームの文字列表現を取得します。 (継承元 Exception) |
| State |
エラー、警告、または "データが見つかりません" というメッセージを表す数値エラー コードを SQL Server から取得します。 これらの値をデコードする方法の詳細については、「 データベース エンジンのイベントとエラー」を参照してください。 |
| TargetSite |
現在の例外をスローするメソッドを取得します。 (継承元 Exception) |
メソッド
| 名前 | 説明 |
|---|---|
| Equals(Object) |
指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
| GetBaseException() |
派生クラスでオーバーライドされた場合、1 つ以上の後続の例外の根本原因である Exception を返します。 (継承元 Exception) |
| GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
例外に関する情報を含む SerializationInfo を設定します。 |
| GetType() |
現在のインスタンスのランタイム型を取得します。 (継承元 Exception) |
| MemberwiseClone() |
現在の Objectの簡易コピーを作成します。 (継承元 Object) |
| ToString() |
現在の SqlException オブジェクトを表し、クライアント接続 ID を含む文字列を返します (詳細については、 ClientConnectionIdを参照してください)。 |
| ToString() |
現在の例外の文字列形式を作成して返します。 (継承元 Exception) |
| ToString() |
エラーの HRESULT を含む文字列を返します。 (継承元 ExternalException) |
イベント
| 名前 | 説明 |
|---|---|
| SerializeObjectState |
例外に関するシリアル化されたデータを含む例外状態オブジェクトを作成するために例外がシリアル化されるときに発生します。 (継承元 Exception) |