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 было вызвано при выполнении , ссылается на конкретный DbBatchDbBatchCommand объект, который вызвал исключение. (Унаследовано от DbException) |
Class |
Получает уровень важности ошибки от поставщика данных платформы .NET Framework для SQL Server. |
ClientConnectionId |
Представляет идентификатор клиентского соединения. Дополнительные сведения см. в разделе Трассировка данных в ADO.NET. |
Data |
Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении. (Унаследовано от Exception) |
DbBatchCommand |
При переопределении в производном классе, если это DbException было вызвано при выполнении DbBatch, ссылается на конкретный DbBatchCommand , который вызвал исключение. (Унаследовано от DbException) |
ErrorCode |
Возвращает |
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, состоящий из пяти символов и указывающий на успешность выполнения операции с базой данных. Первые два символа представляют класс кода возврата (например, ошибка или успешное выполнение), а последние три символа — подкласс. Это позволяет обнаруживать сценарии ошибок с применением подхода с поддержкой переноса баз данных. Для поставщиков баз данных без поддержки или неприменимых сценариев ошибок содержит |
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) |