SqlException 类

定义

SQL Server 返回警告或错误时引发的异常。 此类不能被继承。

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

示例

以下示例生成 , 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

注解

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

严重级别为 10 或更低级别的消息是信息性的,指示用户输入的信息错误导致的问题。 严重级别从 11 到 16 由用户生成,可由用户更正。 严重级别为 17 到 25 的消息指示存在软件或硬件错误。 发生级别 17、18 或 19 错误时,可以继续工作,尽管可能无法执行特定语句。

当严重级别为 19 或以下时,SqlConnection 将保持打开状态。 当严重性级别为 20 或更高时,服务器通常会关闭 SqlConnection。 但是,用户可以重新打开连接并继续操作。 最后两种情况下,执行该命令的方法将生成 SqlException

有关 SQL Server 发送的警告和信息性消息的信息,请参阅 数据库引擎事件和错误。 类 SqlException 映射到 SQL Server 严重性。

下面是有关处理异常的一般信息。 代码应捕获异常,以防止应用程序崩溃,并允许向用户显示相关的错误消息。 可以使用数据库事务来确保数据一致,而不考虑客户端应用程序中发生的情况 (包括崩溃) 。 System.Data.OleDb.OleDbConnection、System.Data.ODBC.ODBCConnection 和 System.Data.SqlClient.SqlConnection 中 (System.Transaction.TransactionScope 或 BeginTransaction 方法等功能) 确保数据一致,而不考虑提供程序引发的异常。 事务可能会失败,因此捕获失败并重试事务。

请注意,从 .NET Framework 4.5 开始, SqlException 可以返回内部 Win32Exception

.NET Framework 数据提供程序的异常类报告特定于提供程序的错误。 例如,System.Data.Odbc 具有 OdbcException,System.Data.OleDb 具有 OleDbException,System.Data.SqlClient 具有 SqlException。 为了获得最佳级别的错误详细信息,请捕获这些异常,并使用这些异常类的成员来获取错误的详细信息。

除了提供程序特定的错误,.NET Framework 数据提供程序类型还可以引发 .NET Framework 异常,例如 System.OutOfMemoryException 和 System.Threading.ThreadAbortException。 可能无法从这些异常中恢复。

输入错误可能会导致 .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 事件以处理这些异常并避免应用程序崩溃。

属性

BatchCommand

如果在执行 DbBatch时引发,DbException则引用触发异常的特定 DbBatchCommand

(继承自 DbException)
Class

获取从 SQL Server .NET Framework 数据提供程序返回的错误的严重级别。

ClientConnectionId

表示客户端连接 ID。 有关详细信息,请参阅 ADO.NET 中的数据跟踪

Data

获取键/值对的集合,这些键/值对提供有关该异常的其他用户定义信息。

(继承自 Exception)
DbBatchCommand

在派生类中重写时,如果在执行 DbBatch时引发此 DbException ,则引用触发异常的特定 DbBatchCommand

(继承自 DbException)
ErrorCode

获取错误的 HRESULT

(继承自 ExternalException)
Errors

获取由一个或多个 SqlError 对象组成的集合,这些对象提供有关 SQL Server .NET Framework 数据提供程序所生成的异常的详细信息。

HelpLink

获取或设置指向与此异常关联的帮助文件链接。

(继承自 Exception)
HResult

获取或设置 HRESULT(一个分配给特定异常的编码数字值)。

(继承自 Exception)
InnerException

获取导致当前异常的 Exception 实例。

(继承自 Exception)
IsTransient

指示此 DbException 表示的错误是否可能是暂时性错误,即重试触发操作是否可以在不进行任何其他更改的情况下成功。

(继承自 DbException)
LineNumber

获取生成错误的 Transact-SQL 批命令或存储过程内的行号。

Message

获取对错误进行描述的文本。

Message

获取描述当前异常的消息。

(继承自 Exception)
Number

获取一个标识错误类型的数字。

Procedure

获取生成错误的存储过程或远程过程调用 (RPC) 的名称。

Server

获取正在运行生成错误的 SQL Server 实例的计算机的名称。

Source

获取生成错误的提供程序的名称。

SqlState

对于支持它的数据库提供程序,包含一个标准的 SQL 5 字符返回代码,指示数据库操作是成功还是失败。 前 2 个字符表示返回代码的 (例如错误、成功),而最后 3 个字符表示 子类,允许以数据库可移植的方式检测错误情况。

对于不支持它的数据库提供程序,或对于不适用的错误方案,包含 null

(继承自 DbException)
StackTrace

获取调用堆栈上的即时框架字符串表示形式。

(继承自 Exception)
State

从 SQL Server 中获取一个数值错误代码,它表示错误、警告或“未找到数据”消息。 有关如何将这些值解码的更多信息,请参阅数据库引擎事件和错误

TargetSite

获取引发当前异常的方法。

(继承自 Exception)

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetBaseException()

当在派生类中重写时,返回 Exception,它是一个或多个并发的异常的根本原因。

(继承自 Exception)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext)

使用关于异常的信息设置 SerializationInfo

GetObjectData(SerializationInfo, StreamingContext)
已过时.

当在派生类中重写时,用关于异常的信息设置 SerializationInfo

(继承自 Exception)
GetType()

获取当前实例的运行时类型。

(继承自 Exception)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前 SqlException 对象的字符串,并包括客户端连接 ID(有关更多信息,请参见 ClientConnectionId)。

ToString()

返回一个字符串,该字符串包含错误的 HRESULT。

(继承自 ExternalException)
ToString()

创建并返回当前异常的字符串表示形式。

(继承自 Exception)

事件

SerializeObjectState
已过时.

当异常被序列化用来创建包含有关该异常的徐列出数据的异常状态对象时会出现该问题。

(继承自 Exception)

适用于

另请参阅