Как отловить ошибку SQL, которая может измениться с обновлениями SQL Server - PullRequest
0 голосов
/ 27 июня 2011

Я сделал уловку, что если выдается конкретная ошибка сервера sql, то код может игнорировать и продолжать. Сотрудник сказал, что сообщение об ошибке, которое я ловлю, генерируется из SQL и может измениться при обновлении до 2008 года. Он сказал, что мое решение будет работать сегодня, но это слабое решение. Итак, мой вопрос ... Как я должен поймать и обработать ошибку, выданную с сервера SQL, если она может зависеть от версии сервера SQL. т.е. (2005, 2008 или новее)? Есть идеи, как сделать улов лучше?

Мой код

string sqlError = "The INSERT statement conflicted with the FOREIGN KEY constraint Table1. The conflict occurred in database Work1, table Table2.";

catch (Exception oExp)
{
//This check will allow the specific error to continue without getting caught.
if (oExp.Message.Contains(Constants.sqlError) == false)
{
  throw oExp;
}
}

1 Ответ

1 голос
/ 27 июня 2011

Как отмечается в комментариях, этого можно избежать, поэтому следует поступить правильно и убедиться, что это не может произойти в первую очередь.

И, как вы уже догадались, использование статического текста - это плохо. Это еще более верно, если учесть, что эти сообщения будут меняться в зависимости от ЯЗЫКА, с которым установлен SQL Server, или от того, что пользователь вошел в систему (поскольку сообщения SQL чувствительны к локали), независимо от уровня обновления.

Кроме того ... Я не совсем понимаю, почему вы хотите продолжить, даже если эта ошибка выдается, как будто она переводит ваши данные в несогласованное состояние, поэтому я проверю, выполняете ли вы правильная вещь в первую очередь. Однако я не знаю ваше заявление ...

Итак, со всеми этими оговорками ... в том случае, если избежать этого невозможно (по любой причине - исключая лень :-)), вместо того, чтобы поймать общий Exception, вы должны поймать SqlException, который включает в себя свойства State и Number, которые вы можете использовать дословно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...