2011-01-28 3 views
1

Я делаю проект в Asp .Net и C#. Я также использую ODP .NET для подключения к моей базе данных Oracle.Исключения и ошибки PL/SQL Обработка

Я использую хранимую процедуру для вставки значения в базу данных. Все в порядке, оно также поднимает все исключения, которые у меня есть.

У меня есть 3 исключения:

  1. , когда значение, которое я пытаюсь уже вставить в базе данных существует
  2. при попытке вставить нулевое значение
  3. По умолчанию «Другие»

Когда возникают первые два исключения, я вставляю ошибку в таблицу «Ошибки», все идет хорошо.

Что я действительно хочу знать, как я могу показать сообщение пользователю при возникновении исключения?

Что-то вроде dbms_output.put_line("Error"); ... но я хочу, чтобы это было показано на моей веб-странице. Это возможно?

Любые советы приветствуются, заранее.

ответ

4

Поскольку ваша программа .NET является вашим клиентом, вы должны разрешить любые необработанные исключения распространяться из вашей программы PL/SQL и обратно на клиент, где вы можете справиться с ним, как и любое другое исключение.

Другими словами, вы должны удалить исключение «когда другие» из вашего кода PL/SQL и вместо этого обернуть свой вызов базы данных (используя ODP.NET) блоком исключений C#. Там вы можете поймать исключение и получить номер ошибки Oracle и текст и отобразить его пользователю, если хотите.

(Используя этот подход, вы можете также использовать raise_application_error в коде PL/SQL для сигнализации ошибки обратно в C# клиент.)

+0

Большое спасибо. С вашим решением я понимаю, что и как я могу это сделать. – l3gion

1

Вы можете исправить хранимая процедура, чтобы вернуть целое число, 0 означает ok, 1 означает исключение типа 1, 2 исключение типа 2 и т. Д. Таким образом, пользовательский интерфейс может уведомить пользователя о том, что метод сохранения не так хорошо, как ожидалось.

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

+0

Здравствуй Давида, Интересный подход. Например, когда возникает исключение, оно вернется, например, 1. Как я могу отправить это значение обратно в мое приложение? Используя переменные OUT в хранимой процедуре? Спасибо – l3gion

0

В наших серверных хранимых процедур SQL у нас есть что-то вроде этого:

IF @@ ERROR <> 0

return (1) 

ELSE

return (0) 

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

Смежные вопросы