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
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
    inherit DbException
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Herencia
SqlException
Atributos

Ejemplos

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

using Microsoft.Data.SqlClient;
using System.Text;

class Program
{
    static void Main()
    {
        string s = GetConnectionString();
        ShowSqlException(s);
        Console.ReadLine();
    }
    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());
            }
        }
    }

    static private string GetConnectionString()
    {
        // To avoid storing the connection string in your code, 
        // you can retrieve it from a configuration file.
        return "Data Source=(local);Initial Catalog=AdventureWorks;"
            + "Integrated Security=SSPI";
    }
}

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 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 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 Microsoft.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 Microsoft.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

Obtiene la instancia de BatchCommand que generó el error o null si la excepción no se generó a partir de un lote.

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.

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.

LineNumber

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

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.

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.

Métodos

GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

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

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

Se aplica a

Consulte también