SqlException Clase

Definición

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

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
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 niveles de gravedad de 11 a 16, y el usuario puede corregirlo. Los niveles de gravedad de 17 a 25 indican errores de software o hardware. 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.

SqlConnection permanece abierto cuando el nivel de gravedad es 19 o menos. 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 un SqlException .

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

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 para permitir mostrar un mensaje de error relevante 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, puede devolver un .

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.

La 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 el momento incorrecto puede generar System.InvalidOperationException.

Por lo tanto, en general, escriba un controlador de excepciones que capture las excepciones específicas del proveedor, así como las excepciones de Common Language Runtime. Estos se pueden superponer como se indica a continuación:

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

O bien:

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 una llamada al método del proveedor de datos de .NET Framework produzca un error 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

Nombre Description
Class

Obtiene el nivel de gravedad del error devuelto por el proveedor de datos de .NET Framework para SQL Server.

ClientConnectionId

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

Data

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

(Heredado de Exception)
ErrorCode

Obtiene el 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 generadas por 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 Exception instancia que provocó la excepción actual.

(Heredado de Exception)
LineNumber

Obtiene el número de línea dentro del lote del comando Transact-SQL o procedimiento almacenado que generó 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 un número que identifica el tipo de error.

Procedure

Obtiene el nombre del procedimiento almacenado o la llamada a procedimiento remoto (RPC) que generó el error.

Server

Obtiene el nombre del equipo que ejecuta una instancia de SQL Server que generó el error.

Source

Obtiene el nombre del proveedor que generó el error.

StackTrace

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

(Heredado de Exception)
State

Obtiene un código de error numérico de SQL Server que representa un mensaje de error, advertencia o "sin datos 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 produce la excepción actual.

(Heredado de Exception)

Métodos

Nombre Description
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GetBaseException()

Cuando se reemplaza en una clase derivada, devuelve la Exception causa principal de una o varias excepciones posteriores.

(Heredado de Exception)
GetHashCode()

Actúa como la función hash predeterminada.

(Heredado de Object)
GetObjectData(SerializationInfo, StreamingContext)

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

GetType()

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

(Heredado de Exception)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual SqlException e incluye el identificador de conexión de cliente (para obtener más información, vea ClientConnectionId).

ToString()

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

(Heredado de Exception)
ToString()

Devuelve una cadena que contiene el valor HRESULT del error.

(Heredado de ExternalException)

Eventos

Nombre Description
SerializeObjectState

Se produce cuando se serializa una excepción para crear un objeto de estado de excepción que contiene datos serializados sobre la excepción.

(Heredado de Exception)

Se aplica a

Consulte también