Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I know if an SQLexception was thrown because of foreign key violation?

Tags:

I want to tell the user that a record was not deleted because it has child data, but how can I be sure that the exception was thrown because of a foreign key violation? I see that there a sqlexception class that is used for all sql exception.

like image 434
ryudice Avatar asked Mar 08 '10 17:03

ryudice


1 Answers

Assume you're using SQL Server.

Using teh web archive - https://web.archive.org/web/20190120182351/https://blogs.msdn.microsoft.com/tomholl/2007/08/01/mapping-sql-server-errors-to-net-exceptions-the-fun-way/

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);         }     }  } 

Case 547 is your man.

UPDATE The above is sample code and should not be used. Please follow the link as to explain why.

like image 67
aronchick Avatar answered Oct 13 '22 07:10

aronchick