SqlException 类

当 SQL Server 返回警告或错误时引发的异常。无法继承此类。

**命名空间:**System.Data.SqlClient
**程序集:**System.Data(在 system.data.dll 中)

语法

声明
<SerializableAttribute> _
Public NotInheritable Class SqlException
    Inherits DbException
用法
Dim instance As SqlException
[SerializableAttribute] 
public sealed class SqlException : DbException
[SerializableAttribute] 
public ref class SqlException sealed : public DbException
/** @attribute SerializableAttribute() */ 
public final class SqlException extends DbException
SerializableAttribute 
public final class SqlException extends DbException

备注

每当 SQL Server .NET Framework 数据提供程序遇到服务器生成的错误时,都将创建此类。(客户端错误作为标准的公共语言运行库异常引发。)SqlException 始终包含至少一个 SqlError 实例。

严重级别小于等于 10 的消息是信息性消息,它们指示由用户输入的信息中的错误所导致的问题。严重级别 11 至 16 的消息是由用户生成的,可以由用户更正。严重级别 17 至 25 的消息指示软件或硬件错误。当发生严重级别为 17、18 或 19 的错误时,虽然可能无法执行特定语句,但仍可以继续工作。

当严重级别小于等于 19 时,SqlConnection 保持打开状态。当严重级别大于等于 20 时,服务器通常会关闭 SqlConnection。但是,用户可以重新打开连接并继续操作。在这两种情况下,执行命令的方法都会生成 SqlException

有关 SQL Server 所发送的警告和信息性消息的信息,请参见“SQL Server 联机丛书”中的“疑难解答”一节。SqlException 类映射到 SQL Server 严重级别。

示例

下面的示例生成 SqlException,然后显示异常。

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
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());
        }
    }
}

继承层次结构

System.Object
   System.Exception
     System.SystemException
       System.Runtime.InteropServices.ExternalException
         System.Data.Common.DbException
          System.Data.SqlClient.SqlException

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

SqlException 成员
System.Data.SqlClient 命名空间
SqlError 类
SqlErrorCollection 类