SqlException クラス

SQL Server が警告またはエラーを返したときにスローされる例外。このクラスは継承できません。

この型のすべてのメンバの一覧については、SqlException メンバ を参照してください。

System.Object
   System.Exception
      System.SystemException
         System.Data.SqlClient.SqlException

<Serializable>
NotInheritable Public Class SqlException   Inherits SystemException
[C#]
[Serializable]
public sealed class SqlException : SystemException
[C++]
[Serializable]
public __gc __sealed class SqlException : public SystemException
[JScript]
public
   Serializable
class SqlException extends SystemException

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

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

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

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

SQL Server が送信する警告メッセージと情報メッセージについては、『SQL Server Books Online』の「トラブルシューティング」を参照してください。 SqlException クラスは、SQL Server の重大度に割り当てられます。

使用例

[Visual Basic, C#, C++] サーバーが見つからないために発生する SqlException を生成し、その例外を表示する例を次に示します。

 
Public Sub ShowSqlException()
     Dim mySelectQuery As String = "SELECT column1 FROM table1"
     Dim myConnection As New SqlConnection ("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Sample;")
     Dim myCommand As New SqlCommand(mySelectQuery, myConnection)

     Try
         myCommand.Connection.Open()
     Catch e As SqlException
         Dim errorMessages As String
         Dim i As Integer

         For i = 0 To e.Errors.Count - 1
             errorMessages += "Index #" & i.ToString() & ControlChars.NewLine _
                            & "Message: " & e.Errors(i).Message & ControlChars.NewLine _
                            & "LineNumber: " & e.Errors(i).LineNumber & ControlChars.NewLine _
                            & "Source: " & e.Errors(i).Source & ControlChars.NewLine _
                            & "Procedure: " & e.Errors(i).Procedure & ControlChars.NewLine
         Next i

        Dim log As System.Diagnostics.EventLog = New System.Diagnostics.EventLog()
        log.Source = "My Application"
        log.WriteEntry(errorMessages)
        Console.WriteLine("An exception occurred. Please contact your system administrator.")
     End Try
 End Sub

[C#] 
public void ShowSqlException() 
{
   string mySelectQuery = "SELECT column1 FROM table1";
   SqlConnection myConnection =
      new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Sample;");
   SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection);

   try 
   {
      myCommand.Connection.Open();
   }
   catch (SqlException e) 
   {
     string errorMessages = "";

     for (int i=0; i < e.Errors.Count; i++)
     {
         errorMessages += "Index #" + i + "\n" +
                          "Message: " + e.Errors[i].Message + "\n" +
                          "LineNumber: " + e.Errors[i].LineNumber + "\n" +
                          "Source: " + e.Errors[i].Source + "\n" +
                          "Procedure: " + e.Errors[i].Procedure + "\n";
     }

     System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();
     log.Source = "My Application";
     log.WriteEntry(errorMessages);
     Console.WriteLine("An exception occurred. Please contact your system administrator.");
   }
}

[C++] 
public:
 void ShowSqlException() 
 {
    String* mySelectQuery = S"SELECT column1 FROM table1";
    SqlConnection* myConnection =
       new SqlConnection(S"Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Sample;");
    SqlCommand* myCommand = new SqlCommand(mySelectQuery,myConnection);

    try 
    {
       myCommand->Connection->Open();
    }
    catch (SqlException* e) 
    {
      String* errorMessages = S"";

      for (int i=0; i < e->Errors->Count; i++)
      {
          errorMessages = String::Concat(
             errorMessages,
             String::Format( S"Index #{0}\nMessage: {1}\nLineNumber: {2}\n",
                __box(i), e->Errors->Item[i]->Message, __box(e->Errors->Item[i]->LineNumber)),
             String::Format( S"Source: {0}\nProcedure: {1}\n",
                e->Errors->Item[i]->Source, e->Errors->Item[i]->Procedure )
          );
      }

      System::Diagnostics::EventLog* log = new System::Diagnostics::EventLog();
      log->Source = S"My Application";
      log->WriteEntry(errorMessages);
      Console::WriteLine(S"An exception occurred. Please contact your system administrator.");
    }
 }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Data.SqlClient

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Data (System.Data.dll 内)

参照

SqlException メンバ | System.Data.SqlClient 名前空間 | SqlError | SqlErrorCollection