Compartir a través de


SqlException Clase

Definición

La excepción que se produce cuando SQL Server devuelve una advertencia o un error. Esta clase no puede heredarse.

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
Herencia
Herencia
Herencia
Atributos

Ejemplos

En el ejemplo siguiente se genera y SqlException , a continuación, se muestra la excepción.

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. (Los errores del lado cliente se producen como excepciones estándar de Common Language Runtime). SqlException siempre contiene al menos una instancia de 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 ha escrito un usuario. El usuario genera los niveles de gravedad de 11 a 16 y puede corregirlo el usuario. Los niveles de gravedad entre 17 y 25 indican errores de software o hardware. Cuando se produce un error de nivel 17, 18 o 19, puede continuar trabajando, aunque es posible que no pueda ejecutar una instrucción determinada.

La conexión SqlConnection permanece abierta cuando el nivel de gravedad es 19 o inferior. Cuando el nivel de gravedad es 20 o superior, el servidor normalmente cierra .SqlConnection Sin embargo, el usuario puede volver a abrir la conexión y continuar. En ambos casos, el método que ejecuta el comando genera una excepción SqlException.

Para obtener información sobre la advertencia y los mensajes informativos enviados por SQL Server, vea Eventos y errores del motor de base de datos. La SqlException clase se asigna a la gravedad de SQL Server.

A continuación se muestra información general sobre el control de excepciones. El código debe detectar excepciones para evitar que la aplicación se bloquee y permitir que se muestre un mensaje de error pertinente al usuario. Puede usar transacciones de base de datos para asegurarse de que los datos son coherentes independientemente de lo que sucede en la aplicación cliente (incluido un bloqueo). 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) garantizan datos coherentes independientemente de las excepciones generadas por un proveedor. Las transacciones pueden producir errores, por lo que detecta errores y vuelve a intentar la transacción.

Tenga en cuenta que a partir de .NET Framework 4.5, SqlException puede devolver un elemento interno Win32Exception.

La clase de excepción de un proveedor de datos de .NET Framework notifica errores específicos del proveedor. Por ejemplo, System.Data.Odbc tiene OdbcException, System.Data.OleDb tiene OleDbException y System.Data.SqlClient tiene SqlException. Para obtener el mejor nivel de detalle de error, capture estas excepciones y use los miembros de estas clases de excepción para obtener detalles del error.

Además de los errores específicos del proveedor, los tipos de proveedor de datos de .NET Framework pueden generar excepciones de .NET Framework, como System.OutOfMemoryException y System.ThreadIng.ThreadAbortException. Es posible que la recuperación de estas excepciones no sea posible.

Una entrada incorrecta puede hacer que un tipo de proveedor de datos de .NET Framework genere una excepción como System.ArgumentException o System.IndexOutOfRangeException. Llamar a un método en un momento incorrecto puede generar System.InvalidOperationException.

Por lo tanto, en general, escriba un controlador de excepciones que detecte las excepciones específicas del proveedor, así como las excepciones de Common Language Runtime. Estos se pueden superponer de la siguiente manera:

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

O:

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 de .NET Framework en un subproceso del grupo de subprocesos sin código de usuario en la pila. En este caso, y al usar llamadas de método asincrónico, debe registrar el UnhandledException evento para controlar esas excepciones y evitar el bloqueo de la aplicación.

Propiedades

BatchCommand

Si se produjo al DbException ejecutar un DbBatchobjeto , hace referencia al elemento específico DbBatchCommand que desencadenó la excepción.

(Heredado de DbException)
Class

Obtiene el nivel de gravedad del error que devuelve el proveedor de datos de .NET Framework para SQL Server.

ClientConnectionId

Representa el identificador de la conexión de cliente Para obtener más información, consulte Traza de datos en ADO.NET.

Data

Obtiene una colección de pares clave/valor que proporciona información definida por el usuario adicional sobre la excepción.

(Heredado de Exception)
DbBatchCommand

Cuando se invalida en una clase derivada, si se produjo al DbException ejecutar un DbBatch, hace referencia al elemento específico DbBatchCommand que desencadenó la excepción.

(Heredado de DbException)
ErrorCode

Obtiene el elemento HRESULT del error.

(Heredado de ExternalException)
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.

HelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.

(Heredado de Exception)
HResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.

(Heredado de Exception)
InnerException

Obtiene la instancia Exception que produjo la excepción actual.

(Heredado de Exception)
IsTransient

Indica si el error representado por esta DbException podría ser un error transitorio, es decir, si volver a intentar la operación de desencadenamiento podría realizarse correctamente sin ningún otro cambio.

(Heredado de DbException)
LineNumber

Obtiene el número de línea del procedimiento almacenado o lote de comandos de Transact-SQL que ha generado el error.

Message

Obtiene el texto que describe el error.

Message

Obtiene un mensaje que describe la excepción actual.

(Heredado de Exception)
Number

Obtiene el número que identifica el tipo de error.

Procedure

Obtiene el nombre del procedimiento almacenado o llamada a procedimiento remoto (RPC) que ha generado el error.

Server

Obtiene el nombre del equipo que ejecuta la instancia de SQL Server que ha generado el error.

Source

Obtiene el nombre del proveedor que ha generado el error.

SqlState

Para los proveedores de bases de datos que lo admiten, contiene un código de retorno SQL estándar de cinco caracteres que indica si la operación de base de datos se realizó correctamente o no. Los dos primeros caracteres representan la clase del código de devolución (por ejemplo, error, correcto), mientras que los tres últimos caracteres representan la subclase, lo que permite detectar escenarios de error en una base de datos portable.

En el caso de los proveedores de bases de datos que no lo admitan o para escenarios de error inaplicables, contiene null.

(Heredado de DbException)
StackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.

(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". Para obtener más información sobre cómo descodificar estos valores, vea Eventos y errores del motor de base de datos.

TargetSite

Obtiene el método que produjo la excepción actual.

(Heredado de Exception)

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.

(Heredado de Exception)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)

Establece el objeto SerializationInfo con información sobre la excepción.

GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

Cuando se invalida en una clase derivada, establece SerializationInfo con información sobre la excepción.

(Heredado de Exception)
GetType()

Obtiene el tipo de tiempo de ejecución de la instancia actual.

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del Object actual.

(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).

ToString()

Devuelve una cadena que contiene el HRESULT del error.

(Heredado de ExternalException)
ToString()

Crea y devuelve una representación de cadena de la excepción actual.

(Heredado de Exception)

Eventos

SerializeObjectState
Obsoletos.

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.

(Heredado de Exception)

Se aplica a

Consulte también