Mam około 3-4 procedur przechowywanych - które można modyfikować w razie potrzeby - które używają RAISERROR
do informowania mojej aplikacji o pewnych krytycznych błędach po stronie bazy danych. Niektóre z tych procedur przechowywanych są wykonywane ze strony C# z ExecuteNonQuery
, a inne są wykonywane z ExecuteReader
. W tej chwili zawijam te polecenia w bloku try { ... } catch (SqlException ThisSqlException) { ... }
, ale problem polega na tym, że ten wyjątek zostanie zgłoszony w co najmniej dwóch scenariuszach, z którymi osobno muszę się uporać:RAISERROR - Jak odróżnić od SqlException?
1) Błędy związane z samym połączeniem lub z błędem lub niedopasowane parametry; i
2) Błędy występujące zawsze, gdy jednoznacznie używam RAISERROR
.
Ponieważ jest to aplikacja WCF, muszę zwrócić do aplikacji klienckiej różne opinie w zależności od charakteru wyjątku (niezależnie od tego, czy było to spowodowane komendą RAISERROR
, czy nie). Jak zatem rozróżnić obie sytuacje?
+1. Myślę, że w taki sposób zamierzam go użyć. – User
można określić niestandardowy numer dla msg_id w celu rozpoznania własnych określonych błędów, ale numer musi zostać najpierw zarejestrowany w tabeli sys.messages bazy danych i musi być> 50000. Patrz http://msdn.microsoft.com/en -us/library/ms178592.aspx – stombeur