SqlException Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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,
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 |
| 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) |