Quiero decirle al usuario que no se eliminó un registro porque tiene datos secundarios, pero ¿cómo puedo estar seguro de que se produjo la excepción debido a una violación de clave externa? Veo que hay una clase sqlexception que se usa para todas las excepciones SQL.¿Cómo puedo saber si se lanzó una excepción SQL debido a una violación de clave externa?
17
A
Respuesta
39
Supongamos que está utilizando SQL Server.
Usando teh Googles - http://blogs.msdn.com/tomholl/archive/2007/08/01/mapping-sql-server-errors-to-net-exceptions-the-fun-way.aspx
try
{
# SQL Stuff
}
catch (SqlException ex)
{
if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error
{
switch (ex.Errors[0].Number)
{
case 547: // Foreign Key violation
throw new InvalidOperationException("Some helpful description", ex);
break;
case 2601: // Primary key violation
throw new DuplicateRecordException("Some other helpful description", ex);
break;
default:
throw new DataAccessException(ex);
}
}
}
la caja 547 es su hombre.
ACTUALIZACIÓN Lo anterior es código de muestra y no se debe utilizar. Por favor, siga el enlace para explicar por qué.
-2
Puede escribir el código de excepción a la esperada en el bloque Try si ninguna excepción será lanzada será más capturas ahora usted puede conseguir number.now error puede comprobar que es una violación clave externa o no
try
{
//your deletetion code
}catch (SqlException ex)
{
if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error
{
switch (ex.Errors[0].Number)
{
case 547: // Foreign Key violation
lblError.Text = "Cannot Delete this Record this is associated with other record...!";
break;
default:
throw;
}
}
}
+1
Por favor, no repita otras respuestas –
Cuestiones relacionadas
- 1. PHPUnit afirman que se lanzó una excepción?
- 2. IntegrityError: violación de clave externa al eliminar
- 3. ¿Cómo puedo determinar si se lanza una IOException debido a una infracción de uso compartido?
- 4. ¿Cómo puedo soltar una clave externa en SQL Server?
- 5. ¿Cómo hacer que el código se ejecute solo si se lanzó una excepción?
- 6. Buscar si se produjo una excepción SQLException debido a un duplicado
- 7. MySQL: Insertar si existe una clave externa
- 8. ¿Detecta cuándo se ejecuta el destructor debido a una excepción?
- 9. ¿Cómo saber si la columna de un modelo es una clave externa?
- 10. Cómo obtener la tabla una clave externa se refiere a
- 11. ¿Cómo puedo crear una clave externa que hace referencia a una clave compuesta entero?
- 12. ¿Debería una violación a las reglas comerciales lanzar una excepción?
- 13. ¿Cómo puedo saber si se hace una rutina, sin bloquear?
- 14. ¿Clave externa a una de muchas tablas?
- 15. ¿Cómo agrego una clave externa a una tabla SQLite existente?
- 16. ¿Cómo manejo las excepciones de SQL específicas (por ejemplo, una violación de restricción única) en C#?
- 17. ¿Cómo elimino una restricción de clave externa solo si existe en el servidor sql?
- 18. El inicializador de tipo para 'NHibernate.LoggerProvider' lanzó una excepción
- 19. clave externa condicional en SQL
- 20. Una forma de comprobar si existe una clave externa en SQL 2005
- 21. ¿Cómo puedo saber si una tabla es una matriz?
- 22. ¿Cómo puedo consultar utilizando una clave externa en MySQL?
- 23. ¿Cómo puedo saber si estoy en una pila de excepción de Delphi?
- 24. ¿Hay alguna forma de obtener el número de línea donde se lanzó una excepción?
- 25. no se puede agregar una clave externa en mysql?
- 26. ¿Cómo puedo saber si una variable VARCHAR contiene una subcadena?
- 27. ¿Cómo puedo saber si una propiedad es una colección genérica?
- 28. Crear una clave externa compuesta en SQL Server 2008
- 29. Clave múltiple como clave externa (SQL)
- 30. Dejar caer una columna con una clave externa
Si sigue el enlace y leer abajo, usted notará que el código anterior se da como un ejemplo de cómo * no * para hacerlo ... – bornfromanegg
absolutamente correcta - Sólo tenía la intención de tener el código aquí para mostrar una versión ampliada de la captura de errores. Supongo que debería poner un aviso para no usar (ya que ese es el problema con la otra página). – aronchick