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

Комментарии

Этот класс создается каждый раз, когда поставщик данных платформа .NET Framework для SQL Server обнаруживает ошибку, созданную с сервера. (Ошибки на стороне клиента создаются в виде стандартных исключений среды CLR.) SqlException всегда содержит по крайней мере один экземпляр SqlError.

Сообщения, имеющие уровень серьезности 10 или менее, являются информационными и указывают на проблемы, вызванные ошибками в информации, введенной пользователем. Уровни серьезности от 11 до 16 создаются пользователем и могут быть исправлены пользователем. Уровни важности с 17 по 25 указывают на ошибки программного обеспечения или оборудования. При возникновении ошибки уровня 17, 18 или 19 можно продолжить работу, хотя вы не сможете выполнить определенную инструкцию.

SqlConnection остается открытым, если уровень важности не превышает 19. Если уровень серьезности равен 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 типы поставщиков данных могут вызывать платформа .NET Framework исключения, такие как System.OutOfMemoryException и System.Threading.ThreadAbortException. Восстановление из этих исключений может быть невозможным.

Недопустимы платформа .NET Framework е входные данные могут привести к возникновению исключения, например System.ArgumentException или System.IndexOutOfRangeException. Вызов метода в неправильное время может вызвать System.InvalidOperationException.

Таким образом, как правило, напишите обработчик исключений, который перехватывает все исключения конкретного поставщика, а также исключения из среды CLR. Они могут быть многослойными:

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

Если это DbException было вызвано при выполнении DbBatch, ссылается на конкретный DbBatchCommand объект, вызвавшее исключение.

(Унаследовано от DbException)
Class

Получает уровень важности ошибки от поставщика данных платформы .NET Framework для SQL Server.

ClientConnectionId

Представляет идентификатор клиентского соединения. Дополнительные сведения см. в разделе Трассировка данных в ADO.NET.

Data

Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении.

(Унаследовано от Exception)
DbBatchCommand

При переопределении в производном классе, если это DbException было вызвано при выполнении объекта DbBatch, ссылается на конкретный DbBatchCommand объект, который вызвал исключение.

(Унаследовано от DbException)
ErrorCode

Возвращает HRESULT ошибки.

(Унаследовано от ExternalException)
Errors

Получает коллекцию из одного или нескольких объектов SqlError, которые предоставляют детальные сведения об исключениях, создаваемых поставщиком данных платформой .NET Framework для SQL Server.

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, состоящий из пяти символов и указывающий на успешность выполнения операции с базой данных. Первые два символа представляют класс кода возврата (например, ошибка или успешное выполнение), а последние три символа — подкласс. Это позволяет обнаруживать сценарии ошибок с применением подхода с поддержкой переноса баз данных.

Для поставщиков баз данных без поддержки или неприменимых сценариев ошибок содержит 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 и содержащую идентификатор клиентского соединения (дополнительные сведения см. в разделе ClientConnectionId).

ToString()

Возвращает строку, содержащую значение HRESULT ошибки.

(Унаследовано от ExternalException)
ToString()

Создает и возвращает строковое представление текущего исключения.

(Унаследовано от Exception)

События

SerializeObjectState
Является устаревшей.

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.

(Унаследовано от Exception)

Применяется к

См. также раздел