Как предотвратить хранимую ошибку при выдаче исключения в SqlClient? - PullRequest
1 голос
/ 06 сентября 2010

Скажем, у меня есть сохраненный процесс, который вставляет некоторые данные в таблицу. Если данные дублируются, это приведет к ошибке сервера SQL (потому что у меня есть уникальный индекс на некоторых столбцах), и эта ошибка вызывает исключение в SqlClient. Что я могу сделать внутри хранимого процесса для обработки ошибки, чтобы в моем коде доступа к данным не генерировалось исключение?

Ответы [ 4 ]

3 голосов
/ 06 сентября 2010

Вы можете использовать TRY CATCH в своих хранимых процедурах.

Это позволит вам обрабатывать ошибки в SQL Server и не подвергать эти ошибки вызову кода.

Конечно, если ваши операторы CATCH сами вызывают исключения / ошибки, они будут предоставлены клиенту.

Однако вам нужно спросить себя, действительно ли вы не хотите знать о таких ошибках - они указывают на проблемы в вашей базе данных / базе кода.

1 голос
/ 07 сентября 2010

Мне неприятно это говорить, но идеальный ответ здесь просто не для того, чтобы sproc вызывал ошибки, а скорее для проверки вставок.Или, лучше, для кода , вызывающего sproc, чтобы только попросить его обработать действительные данные.Размазывание трещин только сделает вещи более уродливыми - это вызывает преднамеренное исключение (выше определенного уровня ошибок).

1 голос
/ 07 сентября 2010

Когда вы создаете свой уникальный индекс, вы можете сказать ему, чтобы он игнорировал любые дубликаты:

CREATE UNIQUE INDEX UIX_YourTable
  ON (SomeColumn) WITH IGNORE_DUP_KEY = ON

Независимо от того, хорошая это идея или нет, решать вам.Если у вас есть такой уникальный индекс, любые дубликаты, которые вы пытаетесь вставить, не вызовут ни исключения, ни вставки - они просто молча завершатся сбоем.

Pro: без исключения

Con: действительно довольно сложно отлаживать случаи, когда вы почесываете голову, размышляя, почему на самом деле данная строка не была вставлена ​​в таблицу, и у вас не было никаких исключений, никаких ошибок и ничего.... (только что случилось со мной сегодня)

0 голосов
/ 07 сентября 2010

Используйте MERGE вместо INSERT

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