mi pregunta es cómo manejar la excepción sql en C#, ¿hay alguna manera de verificar qué tipo de la excepción sql arroja desde la capa de acceso a datos? Por ejemplo, si db arroja una excepción de restricción única, o una excepción de clave externa, ¿hay alguna manera de atraparla desde C#? ¿Cuál es el patrón de manejo de excepciones que está utilizando para estas excepciones db?¿Cómo manejo las excepciones de SQL específicas (por ejemplo, una violación de restricción única) en C#?
Respuesta
SqlException Catch
catch(SqlException ex)
{
foreach(SqlError error in ex.Errors)
{
}
}
puede comprobar el texto del mensaje, el número y lo enchufe caso de que saber el error ...
try {
}
catch (SqlException ex)
{
string str;
str = "Source:"+ ex.Source;
str += "\n"+ "Number:"+ ex.Number.ToString();
str += "\n"+ "Message:"+ ex.Message;
str += "\n"+ "Class:"+ ex.Class.ToString();
str += "\n"+ "Procedure:"+ ex.Procedure.ToString();
str += "\n"+ "Line Number:"+ex.LineNumber.ToString();
str += "\n"+ "Server:"+ ex.Server.ToString();
Console.WriteLine (str, "Database Exception");
}
Tener un vistazo a la clase documentation of the SqlException, en particular, , en su properties: SqlException.Number
, por ejemplo, debería permitirle identificar qué tipo de SqlException (restricción única, clave externa, ...) ocurrió.
Puede usar excepciones filtradas para detectar errores específicos. VB.NET:
Try
...
Catch ex as SqlException When ex.Number = ...
...
Catch ex as SqlException When ex.Number = ...
...
End Try
C# (versión 6 o superior):
try
{
...
}
catch (SqlException ex) when (ex.Number == ...)
{
...
}
catch (SqlException ex) when (ex.Number == ...)
{
...
}
Depende de la excepción y su base de datos. Su base de datos producirá un código de error único para las cosas específicas, como restricciones, permisos, etc., pero ese código de error varía de DB a DB. Oracle tiene un pdf MASIVO (2000+ páginas) que enumera todos los errores posibles que puede arrojar y estoy seguro de que Sqlserver tiene algo similar. Lo que quiero decir es que busca códigos de error específicos, entonces necesita trp solo aquellos en la sección catch y manejarlos de manera diferente a la multitud de otros errores que puede obtener.
- 1. Violación de restricción única durante la inserción: ¿por qué? (Oracle)
- 2. Capturando una violación de restricción en psql
- 3. Manejo de excepciones generales en C#
- 4. restricción de fila única en SQL Server
- 5. ¿Cómo verificar la violación de restricción única en nHibernate y DDD antes de guardar?
- 6. El manejo de excepciones en PL/SQL
- 7. C#: Manejo WebClient "violación de protocolo"
- 8. SQL ¿Puedo tener una restricción "condicionalmente única" en una tabla?
- 9. manejo de excepciones en C#
- 10. Cómo crear una restricción única compuesta en SQL Server 2005
- 11. violación de restricción de cargador
- 12. ¿Cómo atrapo la excepción de violación de restricción de EclipseLink?
- 13. SQL Server 2005 ¿Cómo crear una restricción única?
- 14. Manejo de excepciones en Obj-C
- 15. Violación de restricción única en la actualización de Magento 1.4.0 a 1.6.2.0
- 16. violación de restricción de carga en Websphere
- 17. restricción única condicional
- 18. MERGE Violación de restricción PRIMARY KEY
- 19. C#: manejo de excepciones en llamada recursiva
- 20. Violación de restricción UNIQUE KEY nula
- 21. Cómo creo una restricción única de columna múltiple en SQL Server
- 22. Cassandra - restricción única en la clave de fila
- 23. restricción de violación de clave primaria
- 24. ¿Dónde manejo las excepciones asincrónicas?
- 25. Restricción única en una arquitectura RESTFul
- 26. Intercambio de valores con una restricción única en Entity Framework
- 27. Wcf manejo de excepciones
- 28. Shiro: Manejo de excepciones lanzadas por anotaciones
- 29. SQL Server 2005 Restricción única en dos columnas
- 30. C# ThreadPool QueueUserWorkItem Manejo de excepciones