SqlException Clase

Definición

La excepción que se produce cuando SQL Server devuelve una advertencia o un error.The exception that is thrown when SQL Server returns a warning or error. Esta clase no puede heredarse.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
Herencia
Atributos

Ejemplos

En el ejemplo siguiente se SqlException genera un y, a continuación, se muestra la excepción.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

Comentarios

Esta clase se crea cada vez que el proveedor de datos de .NET Framework para SQL Server encuentra un error generado desde el servidor.This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. (Los errores del lado cliente se producen como excepciones de Common Language Runtime estándar). siempre contiene al menos una instancia de SqlError. SqlException(Client side errors are thrown as standard common language runtime exceptions.) SqlException always contains at least one instance of SqlError.

Los mensajes que tienen un nivel de gravedad de 10 o menos son informativos e indican problemas causados por errores en la información que un usuario ha escrito.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. Los niveles de gravedad entre 11 y 16 los genera el usuario y pueden ser corregidos por el usuario.Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. Los niveles de gravedad entre 17 y 25 indican errores de software o hardware.Severity levels from 17 through 25 indicate software or hardware errors. Cuando se produce un error de nivel 17, 18 o 19, puede seguir trabajando, aunque es posible que no pueda ejecutar una instrucción determinada.When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.

La conexión SqlConnection permanece abierta cuando el nivel de gravedad es 19 o inferior.The SqlConnection remains open when the severity level is 19 or less. Cuando el nivel de gravedad es 20 o superior, el servidor cierra normalmente el SqlConnection.When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. Sin embargo, el usuario puede volver a abrir la conexión y continuar.However, the user can reopen the connection and continue. En ambos casos, el método que ejecuta el comando genera una excepción SqlException.In both cases, a SqlException is generated by the method executing the command.

Para obtener información acerca de los mensajes informativos y de advertencia enviados por SQL Server, vea motor de base de datos eventos y errores.For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. La SqlException clase se asigna a SQL Server gravedad.The SqlException class maps to SQL Server severity.

A continuación se encuentra información general sobre el control de excepciones.The following is general information on handling exceptions. El código debe detectar excepciones para evitar que la aplicación se bloquee y permitir que se muestre un mensaje de error relevante al usuario.Your code should catch exceptions to prevent the application from crashing and to allow displaying a relevant error message to the user. Puede utilizar transacciones de base de datos para asegurarse de que los datos sean coherentes independientemente de lo que suceda en la aplicación cliente (incluido un bloqueo).You can use database transactions to ensure that the data is consistent regardless of what happens in the client application (including a crash). Características como System. Transaction. TransactionScope o el método BeginTransaction (en System. Data. OleDb. OleDbConnection, System. Data. ODBC. ODBCConnection y System. Data. SqlClient. SqlConnection) aseguran datos coherentes independientemente de las excepciones. generado por un proveedor.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. Se pueden producir errores en las transacciones, por lo que debe detectar errores y volver a intentar la transacción.Transactions can fail, so catch failures and retry the transaction.

Tenga en cuenta que, a partir SqlException de .NET Framework 4,5, Win32Exceptionpuede devolver un valor interno.Note that beginning with .NET Framework 4.5, SqlException can return an inner Win32Exception.

La clase de excepción de un proveedor de datos .NET Framework informes de errores específicos del proveedor.The exception class of a .NET Framework data provider reports provider-specific errors. Por ejemplo, System. Data. ODBC tiene OdbcException, System. Data. OleDb tiene OleDbException y System. Data. SqlClient tiene SqlException.For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. Para obtener el mejor nivel de detalle del error, detecte estas excepciones y use los miembros de estas clases de excepción para obtener detalles del error.For the best level of error detail, catch these exceptions and use the members of these exception classes to get details of the error.

Además de los errores específicos del proveedor, .NET Framework tipos de proveedores de datos pueden generar .NET Framework excepciones como System. OutOfMemoryException y 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. Es posible que la recuperación de estas excepciones no sea posible.Recovery from these exceptions may not be possible.

Una entrada incorrecta puede hacer que un tipo de proveedor de datos .NET Framework genere una excepción como System. ArgumentException o System. IndexOutOfRangeException.Bad input can cause a .NET Framework data provider type to raise an exception such as System.ArgumentException or System.IndexOutOfRangeException. Llamar a un método en un momento incorrecto puede generar System. InvalidOperationException.Calling a method at the wrong time can raise System.InvalidOperationException.

Por lo tanto, en general, escriba un controlador de excepciones que detecte cualquier excepción específica del proveedor, así como excepciones del Common Language Runtime.So, in general, write an exception handler that catches any provider specific exceptions as well as exceptions from the common language runtime. Se pueden disponer de niveles como se indica a continuación: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.  
}  
  

O bien:Or:

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

También es posible que se produzca un error en una llamada al método del proveedor de datos .NET Framework en un subproceso del grupo de subprocesos sin código de usuario en la pila.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. En este caso, y al usar llamadas asincrónicas a métodos, debe registrar el UnhandledException evento para controlar esas excepciones y evitar el bloqueo de la aplicación.In this case, and when using asynchronous method calls, you must register the UnhandledException event to handle those exceptions and avoid application crash.

Propiedades

Class

Obtiene el nivel de gravedad del error que devuelve el proveedor de datos de .NET Framework para SQL Server.Gets the severity level of the error returned from the .NET Framework Data Provider for SQL Server.

ClientConnectionId

Representa el identificador de la conexión de clienteRepresents the client connection ID. Para obtener más información, consulte Traza de datos en ADO.NET.For more information, see Data Tracing in ADO.NET.

Data

Obtiene una colección de pares clave-valor que proporcionan más información definida por el usuario sobre la excepción.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Heredado de Exception)
Errors

Obtiene una colección de uno o varios objetos SqlError que proporcionan información detallada sobre las excepciones que genera el proveedor de datos de .NET Framework para 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

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.Gets or sets a link to the help file associated with this exception.

(Heredado de Exception)
HResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Heredado de Exception)
InnerException

Obtiene la instancia Exception que produjo la excepción actual.Gets the Exception instance that caused the current exception.

(Heredado de Exception)
LineNumber

Obtiene el número de línea del procedimiento almacenado o lote de comandos de Transact-SQL que ha generado el error.Gets the line number within the Transact-SQL command batch or stored procedure that generated the error.

Message

Obtiene el texto que describe el error.Gets the text describing the error.

Number

Obtiene el número que identifica el tipo de error.Gets a number that identifies the type of error.

Procedure

Obtiene el nombre del procedimiento almacenado o llamada a procedimiento remoto (RPC) que ha generado el error.Gets the name of the stored procedure or remote procedure call (RPC) that generated the error.

Server

Obtiene el nombre del equipo que ejecuta la instancia de SQL Server que ha generado el error.Gets the name of the computer that is running an instance of SQL Server that generated the error.

Source

Obtiene el nombre del proveedor que ha generado el error.Gets the name of the provider that generated the error.

StackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.Gets a string representation of the immediate frames on the call stack.

(Heredado de Exception)
State

Obtiene un código de error numérico de SQL Server que representa un error, una advertencia o el mensaje "datos no encontrados".Gets a numeric error code from SQL Server that represents an error, warning or "no data found" message. Para obtener más información sobre cómo descodificar estos valores, vea Eventos y errores del motor de base de datos.For more information about how to decode these values, see Database Engine Events and Errors.

TargetSite

Obtiene el método que produjo la excepción actual.Gets the method that throws the current exception.

(Heredado de Exception)

Métodos

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
GetBaseException()

Cuando se reemplaza en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Heredado de Exception)
GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Establece el objeto SerializationInfo con información sobre la excepción.Sets the SerializationInfo with information about the exception.

GetType()

Obtiene el tipo de tiempo de ejecución de la instancia actual.Gets the runtime type of the current instance.

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto SqlException actual e incluye el identificador de la conexión de cliente (para obtener más información, vea ClientConnectionId).Returns a string that represents the current SqlException object, and includes the client connection ID (for more information, see ClientConnectionId).

Eventos

SerializeObjectState

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Heredado de Exception)

Se aplica a

Consulte también: