SqlException SqlException SqlException SqlException Class

Определение

Исключение, которое возникает, когда SQL Server возвращает предупреждение или ошибку.The exception that is thrown when SQL Server returns a warning or error. Этот класс не наследуется.This class cannot be inherited.

public ref class SqlException sealed : System::Data::Common::DbException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Наследование
Атрибуты

Примеры

В следующем примере создается объект SqlException , а затем отображается исключение.The following example generates a SqlException and then displays the exception.

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 встречает ошибку, созданную на сервере.This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. (Ошибки на стороне клиента создаются как стандартные исключения среды CLR.) всегда содержит по крайней мере один SqlErrorэкземпляр. SqlException(Client side errors are thrown as standard common language runtime exceptions.) SqlException always contains at least one instance of SqlError.

Сообщения с уровнем серьезности 10 или менее являются информационными и указывают на проблемы, вызванные ошибками в данных, введенных пользователем.Messages that have a severity level of 10 or less are informational and indicate problems caused by mistakes in information that a user has entered. Уровни серьезности от 11 до 16 создаются пользователем и могут быть исправлены пользователем.Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. Уровни важности с 17 по 25 указывают на ошибки программного обеспечения или оборудования.Severity levels from 17 through 25 indicate software or hardware errors. При возникновении ошибки уровня 17, 18 или 19 можно продолжать работу, хотя выполнение определенной инструкции может оказаться невозможным.When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.

SqlConnection остается открытым, если уровень важности не превышает 19.The SqlConnection remains open when the severity level is 19 or less. Если уровень серьезности равен 20 или больше, сервер обычно закрывает SqlConnection.When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. Тем не менее, пользователь может опять открыть подключение и продолжить работу.However, the user can reopen the connection and continue. В обоих случаях выполняющим команду методом создается SqlException.In both cases, a SqlException is generated by the method executing the command.

Сведения о предупреждениях и информационных сообщениях, отправленных SQL Server, см. в разделе ядро СУБД события и ошибки.For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. SqlException Класс сопоставляется с SQL Server уровнем серьезности.The SqlException class maps to SQL Server severity.

Ниже приведены общие сведения об обработке исключений.The following is general information on handling exceptions. Код должен перехватывать исключения, чтобы предотвратить сбой приложения и разрешить пользователю выводить соответствующее сообщение об ошибке.Your code should catch exceptions to prevent the application from crashing and to allow displaying a relevant error message to the user. Можно использовать транзакции базы данных, чтобы обеспечить единообразие данных независимо от того, что происходит в клиентском приложении (включая сбой).You can use database transactions to ensure that the data is consistent regardless of what happens in the client application (including a crash). Такие функции, как System. Transaction. TransactionScope или метод BeginTransaction (в System. Data. OleDb. OleDbConnection, System. Data. ODBC. ODBCConnection и System. Data. SqlClient. SqlConnection), обеспечивают целостность данных независимо от исключений. вызвано поставщиком.Features like System.Transaction.TransactionScope or the BeginTransaction method (in System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection, and System.Data.SqlClient.SqlConnection) ensure consistent data regardless of exceptions raised by a provider. Транзакции могут завершиться ошибкой, поэтому перехватить сбои и повторите транзакцию.Transactions can fail, so catch failures and retry the transaction.

Обратите внимание, что начиная с SqlException .NET Framework 4,5, может Win32Exceptionвозвращать внутренний объект.Note that beginning with .NET Framework 4.5, SqlException can return an inner Win32Exception.

Класс исключений .NET Framework поставщика данных сообщает об ошибках, связанных с поставщиком.The exception class of a .NET Framework data provider reports provider-specific errors. Например, System. Data. ODBC имеет OdbcException, System. Data. OleDb имеет Оледбексцептион, а System. Data. SqlClient — SqlException.For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. Для получения подробных сведений об ошибке перехватите эти исключения и используйте члены этих классов исключений.For the best level of error detail, catch these exceptions and use the members of these exception classes to get details of the error.

В дополнение к ошибкам, зависящим от поставщика, .NET Framework типы поставщиков данных могут вызывать .NET Framework исключения, такие как System. OutOfMemoryException и System. Threading. ThreadAbortException.In addition to the provider-specific errors, .NET Framework data provider types can raise .NET Framework exceptions such as System.OutOfMemoryException and System.Threading.ThreadAbortException. Восстановление из этих исключений может быть невозможным.Recovery from these exceptions may not be possible.

Неверные входные данные могут привести к тому, что .NET Framework тип поставщика данных может вызвать исключение, например System. ArgumentException или System. IndexOutOfRangeException.Bad input can cause a .NET Framework data provider type to raise an exception such as System.ArgumentException or System.IndexOutOfRangeException. Вызов метода в неправильном времени может вызвать System. InvalidOperationException.Calling a method at the wrong time can raise System.InvalidOperationException.

Таким образом, в общем случае напишите обработчик исключений, который перехватывает любые исключения, относящиеся к поставщику, а также исключения из среды CLR.So, in general, write an exception handler that catches any provider specific exceptions as well as exceptions from the common language runtime. Их можно расположить следующим образом:These can be layered as follows:

try {  
   // code here  
}  
catch (SqlException odbcEx) {  
   // Handle more specific SqlException exception here.  
}  
catch (Exception ex) {  
   // Handle generic ones here.  
}  

Или:Or:

try {  
   // code here  
}  
catch (Exception ex) {  
   if (ex is SqlException) {  
      // Handle more specific SqlException exception here.  
   }  
   else {  
      // Handle generic ones here.  
   }  
}  

Можно также вызвать сбой вызова метода поставщика данных .NET Framework в потоке пула потоков без пользовательского кода в стеке.It is also possible for a .NET Framework data provider method call to fail on a thread pool thread with no user code on the stack. В этом случае и при использовании асинхронных вызовов методов необходимо зарегистрировать UnhandledException событие для их решения и избежать сбоя приложения.In this case, and when using asynchronous method calls, you must register the UnhandledException event to handle those exceptions and avoid application crash.

Свойства

Class Class Class Class

Получает уровень важности ошибки от поставщика данных платформы .NET Framework для SQL Server.Gets the severity level of the error returned from the .NET Framework Data Provider for SQL Server.

ClientConnectionId ClientConnectionId ClientConnectionId ClientConnectionId

Представляет идентификатор клиентского соединения.Represents the client connection ID. Дополнительные сведения см. в разделе Трассировка данных в ADO.NET.For more information, see Data Tracing in ADO.NET.

Data Data Data Data

Возвращает коллекцию пар ключ/значение, предоставляющие дополнительные сведения об исключении, определяемые пользователем.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
Errors Errors Errors Errors

Получает коллекцию из одного или нескольких объектов SqlError, которые предоставляют детальные сведения об исключениях, создаваемых поставщиком данных платформой .NET Framework для SQL Server.Gets a collection of one or more SqlError objects that give detailed information about exceptions generated by the .NET Framework Data Provider for SQL Server.

HelpLink HelpLink HelpLink HelpLink

Получает или задает ссылку на файл справки, связанный с этим исключением.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Возвращает экземпляр класса Exception, который вызвал текущее исключение.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
LineNumber LineNumber LineNumber LineNumber

Возвращает номер вызвавшей ошибку строки пакета команд Transact-SQL или хранимой процедуры.Gets the line number within the Transact-SQL command batch or stored procedure that generated the error.

Message Message Message Message

Возвращает текст, описывающий ошибку.Gets the text describing the error.

Number Number Number Number

Возвращает число, определяющее тип ошибки.Gets a number that identifies the type of error.

Procedure Procedure Procedure Procedure

Возвращает имя вызвавшей ошибку хранимой процедуры или удаленного вызова процедур (RPC).Gets the name of the stored procedure or remote procedure call (RPC) that generated the error.

Server Server Server Server

Возвращает имя компьютера, на котором выполняется вызвавший ошибку экземпляр SQL Server.Gets the name of the computer that is running an instance of SQL Server that generated the error.

Source Source Source Source

Возвращает имя вызвавшего ошибку поставщика.Gets the name of the provider that generated the error.

StackTrace StackTrace StackTrace StackTrace

Получает строковое представление непосредственных кадров в стеке вызова.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
State State State State

Получает от SQL Server числовой код ошибки, предоставляющий ошибку, предупреждение или сообщение о том, что данные не обнаружены.Gets a numeric error code from SQL Server that represents an error, warning or "no data found" message. Дополнительные сведения о расшифровке этих значений см. в статье События и ошибки ядра СУБД.For more information about how to decode these values, see Database Engine Events and Errors.

TargetSite TargetSite TargetSite TargetSite

Возвращает метод, создавший текущее исключение.Gets the method that throws the current exception.

(Inherited from Exception)

Методы

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

При переопределении в производном классе возвращает исключение Exception, которое является корневой причиной одного или нескольких последующих исключений.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

Заполняет объект SerializationInfo сведениями об исключении.Sets the SerializationInfo with information about the exception.

GetType() GetType() GetType() GetType()

Возвращает тип среды выполнения текущего экземпляра.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект SqlException и содержащую идентификатор клиентского соединения (дополнительные сведения см. в разделе ClientConnectionId).Returns a string that represents the current SqlException object, and includes the client connection ID (for more information, see ClientConnectionId).

События

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

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

Дополнительно