2010-03-08 20 views

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

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

+0

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

-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