Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обработка ошибок  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
Посмотрел я тут примеры шаблонов процедур с блоком try-Catch, почитал BOL в частности "Использование конструкции TRY…CATCH с инструкцией RAISERROR" и чего-то не совсем понял, как отправить клиенту сообщение об ошибке с исходным номером.
До сего времени я обрабатывал на клиенте ADOConnection.Errors[i].NativeError. А в случае try-Catch на клиент прилетает(если брать примеры из BOL) либо SELECT ERROR_NUMBER() as ErrorNumber, либо
RAISERROR 
        (
        @ErrorMessage, 
        @ErrorSeverity, 
        1,               
        @ErrorNumber,    -- parameter: original error number.
        @ErrorSeverity,  -- parameter: original error severity.
        @ErrorState,     -- parameter: original error state.
        @ErrorProcedure, -- parameter: original error procedure name.
        @ErrorLine       -- parameter: original error line number.
        );

т.е. код ошибки 50000, а далее надо её парсить, чтоб получить исходную

Кто как обрабатывает, поделитесь?
17 ноя 11, 13:04    [11612390]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104751
minva
т.е. код ошибки 50000, а далее надо её парсить, чтоб получить исходную

Т.е. вы собираетесь и на сервере перехватывать ошибки и клиенте еще ?
17 ноя 11, 13:07    [11612445]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
Glory,

На сервере возникла ошибка, я её поймал, откатил транзакцию, начатую на сервере, а что за ошибка разбирается клиент. Что в этом не так?
17 ноя 11, 13:26    [11612742]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104751
minva
я её поймал, откатил транзакцию

SET XACT_ABORT
Specifies whether SQL Server automatically rolls back the current transaction when a Transact-SQL statement raises a run-time error.
17 ноя 11, 13:39    [11612946]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Подождать Denali, там, вроде, throw обещали сделать.
17 ноя 11, 13:50    [11613162]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
minva
Member

Откуда: г. Калуга
Сообщений: 1213
Glory, а где написано, что я вылетаю нафиг из процедуры в случае ошибки? вот попробовал сделал

create table  tt1 (id INT, 
                  f1 int,
                  CONSTRAINT [PK_id] PRIMARY KEY (ID))
go

insert into tt1 values (1, 1)
go

create procedure P1
as
begin
  SET XACT_ABORT ON
  begin TRANSACTION
  
  print 'Это сообщения я увижу'
  
  insert into tt1 values (1, 2)
  update tt1 set f1 = 8 where id = 1
  
  print 'Этого сообщения я не увижу'
  
  if @@trancount = 1 
  begin
    Commit transaction
  end
  else
    print 'нет транзакции'
end
GO

exec p1;
go

select * from tt1
go

drop procedure p1
drop table tt1
17 ноя 11, 13:58    [11613272]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
minva
Посмотрел я тут примеры шаблонов процедур с блоком try-Catch, почитал BOL в частности "Использование конструкции TRY…CATCH с инструкцией RAISERROR"


И где try...catch в Вашем примере?
17 ноя 11, 14:24    [11613635]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104751
minva
Glory, а где написано, что я вылетаю нафиг из процедуры в случае ошибки?

А причем тут процедура ?
Вы сами сказали, что НЕ собираетесь _обрабатывать_ ошибку на сервере
17 ноя 11, 14:30    [11613715]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
minva,

По идее, блок try...catch в .Net отлавливает ошибку, генерируемую RAISERROR и генерирует SqlException.
17 ноя 11, 14:34    [11613769]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить