SqlException Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Исключение, которое возникает при 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
Комментарии
Этот класс создается всякий раз, когда Data Provider .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.ThreadAbortException. Восстановление из этих исключений может оказаться невозможным.
Недопустимы .NET е входные данные могут привести к возникновению исключения, например 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 событие для обработки этих исключений и избежать сбоя приложения.
Свойства
| Имя | Описание |
|---|---|
| Class |
Возвращает уровень серьезности ошибки, возвращенной поставщиком данных .NET Framework для SQL Server. |
| ClientConnectionId |
Представляет идентификатор подключения клиента. Дополнительные сведения см. в разделе "Трассировка данных" в ADO.NET. |
| Data |
Возвращает коллекцию пар "ключ-значение", которые предоставляют дополнительные пользовательские сведения об исключении. (Унаследовано от Exception) |
| ErrorCode |
Возвращает ошибку |
| Errors |
Возвращает коллекцию одного или нескольких объектов SqlError, которые предоставляют подробные сведения об исключениях, .NET созданных Data Provider Framework для SQL Server. |
| 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() |
При переопределении в производном классе возвращает Exception, которая является основной причиной одного или нескольких последующих исключений. (Унаследовано от Exception) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfo Задает сведения об исключении. |
| GetType() |
Возвращает тип среды выполнения текущего экземпляра. (Унаследовано от Exception) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий SqlException объект, и включает идентификатор подключения клиента (дополнительные сведения см. в разделе ClientConnectionId). |
| ToString() |
Создает и возвращает строковое представление текущего исключения. (Унаследовано от Exception) |
| ToString() |
Возвращает строку, содержащую HRESULT ошибки. (Унаследовано от ExternalException) |
События
| Имя | Описание |
|---|---|
| SerializeObjectState |
Происходит при сериализации исключения для создания объекта состояния исключения, содержащего сериализованные данные об исключении. (Унаследовано от Exception) |