powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как определить из-за чего произошла ошибка в хранимой процедуре в SQL ?
4 сообщений из 4, страница 1 из 1
Как определить из-за чего произошла ошибка в хранимой процедуре в SQL ?
    #34110752
student2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть хранимая процедура в SQL Server, которая что-то делает, но может получиться так что из-за какой-нибудь ошибки она не сделает то что надо.
Ну папример хр. процедура добавляет запись, но ввиду того что дублируется уникальное значение, запись не добавится и вернется ошибка.

Но мне надо пользователю вывести не просто сообщение, а что ошибка произошла из-за дублирующегося значения в поле "Х", а может быть и поле "Y".
Можно конечно перед проверкой все проверять, но на фига, если сервер и так все проверет.

Одним словом как мне опредеить тип и причину ошибки и в зависимости от этого вывести нормальное сообщение?

Спасибо
...
Рейтинг: 0 / 0
Как определить из-за чего произошла ошибка в хранимой процедуре в SQL ?
    #34112151
C...R...a...S...H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Student2007:
Есть хранимая процедура в SQL Server, которая что-то делает, но может получиться так что из-за какой-нибудь ошибки она не сделает то что надо.
Ну папример хр. процедура добавляет запись, но ввиду того что дублируется уникальное значение, запись не добавится и вернется ошибка.

Но мне надо пользователю вывести не просто сообщение, а что ошибка произошла из-за дублирующегося значения в поле "Х", а может быть и поле "Y".
Можно конечно перед проверкой все проверять, но на фига, если сервер и так все проверет.

Одним словом как мне опредеить тип и причину ошибки и в зависимости от этого вывести нормальное сообщение?

Спасибо

private static void DisplaySqlErrors(SqlException exception)
{
for (int i = 0; i {
Console.WriteLine("Index #" + i + "\n Error: " + exception.Errors[i].ToString() );
}
Console.ReadLine();
}----------------------------------------
Knowledge is P...O...w...E...R!
My site
...
Рейтинг: 0 / 0
Как определить из-за чего произошла ошибка в хранимой процедуре в SQL ?
    #34112487
student2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. хотите сказать, что класс SQLException содержит всю необходимую мне информацию?

Счас посмотрю

Спасибо!
...
Рейтинг: 0 / 0
Как определить из-за чего произошла ошибка в хранимой процедуре в SQL ?
    #34117009
NEKRASSOV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще вариант. SQLExeption не обработает (и тем более не отменит) сбой в ХП при вставке данных. Надежнее всего выполнять операции в ХП (если речь идет о запросах типа update,insert) внутри транзакции (begin tran - rollback tran - commit tran) c проверкой ошибок. Тогда если в одну таблицу данные вставятся, а в другую нет - то произойдет откат всей транзакции (т.е. отменяются все выполненные перед ошибкой запросы). В результате не будет сиротских строк. И при этом нужно проверять после выполнения процедуры значение параметра ХП типа ReturnValue. Если его значение = 0 - значит транзакция выполнена успешно. Если <> 0 - произошел откат транзакции из-за ошибки. Причем значение может четко "объяснить" - какая была ошибка.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
CREATE PROCEDURE dbo.proc
(
		@Yj int,
		@a varchar ( 50 ),
		@c int,
		@id int,
		@d int,
		@g smallint
)
as begin
set nocount on
	begin tran
	
if not exists(SELECT dbo.тAccount.* FROM dbo.тAccount WHERE  (Nac = @a) AND (IDkl = @id)) begin
	raiserror ('Доступ запрещен', 16 , 1 )
	return( 3 )
	end

declare @q int
SELECT @q=dbo.тAccount.IDac FROM dbo.тAccount WHERE  (Nac = @a) AND (IDkl = @id);
declare @ddil datetime
declare @days int
SELECT @days=(dbo.тГор.СК+ 1 ), @ddil=DATEADD(hour,dbo.тГор.Час,getutcdate()) FROM dbo.тГор WHERE (ГорKey=@g);  

INSERT INTO dbo.тOplata
                      (IDdealer, IDac, Summa, dateBegin)
VALUES     (@d, @q, @c, @ddil)

declare @dn datetime
SELECT @dn=dbo.тDostup.DateEnd FROM dbo.тDostup WHERE dbo.тDostup.IDkl=@id; 

UPDATE    dbo.тDostup
SET              DateEnd = DATEADD(day,@days,@dn)
WHERE     (IDkl = @id)


if @@error !=  0  
begin
	rollback tran
	return ( 1 )
end
	commit tran
	return( 0 )
end
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как определить из-за чего произошла ошибка в хранимой процедуре в SQL ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]