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

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
Хочу в приложении отловить некоторые сообщения SQL сервера об ошибках и прицепить к ним юзер-фрэндли объяснения с извинениями и пр.

Например,
The UPDATE statement conflicted with the FOREIGN KEY constraint xxx . The conflict occurred in database yyy


я могу в приложении "тупо" проанализировать наличие ключевых слов и понять - это то сообщение, которое мне надо.
Вопрос: если у юзера установлен сервер с другим языком, например, русским, тогда такие сообщения будут приходить другие.

Можно ли выловить нужные мне, независимо от языка сервера?
18 янв 19, 15:01    [21788804]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4536
256k,
select * from sys.messages
18 янв 19, 15:03    [21788806]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
invm
Member

Откуда: Москва
Сообщений: 9128
256k
Можно ли выловить нужные мне, независимо от языка сервера?
Анализировать код ошибки, а не текст.
18 янв 19, 15:08    [21788813]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
invm
256k
Можно ли выловить нужные мне, независимо от языка сервера?
Анализировать код ошибки, а не текст.


да, вот нашел
547 The %ls statement conflicted with the %ls constraint "%.*ls". The conflict occurred in database "%.*ls", table "%.*ls"%ls%.*ls%ls.
18 янв 19, 15:22    [21788829]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4536
256k, 547 - код ошибки если не ошибаюсь... invm вам уже сказал как делать должно.
18 янв 19, 15:24    [21788834]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7407
256k,

Можно так сделать.
Пишите в расширенном свойстве ограничения понятный комментарий, затем в обработчике begin catch извлекайте этот комментарий по наименованию ограничения, которое содержится в тексте ошибки. В зависимости от языка позиция в строке будет разной. Язык определяется как @@language.
18 янв 19, 15:30    [21788845]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 763
256k,

Думаю, лучше всего использовать вот это - ERROR_MESSAGE

Пример оттуда
BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT  
        ERROR_NUMBER() AS ErrorNumber  
        ,ERROR_SEVERITY() AS ErrorSeverity  
        ,ERROR_STATE() AS ErrorState  
        ,ERROR_PROCEDURE() AS ErrorProcedure  
        ,ERROR_LINE() AS ErrorLine  
        ,ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  


Но надо учитывать что try...catch понижает производительность.
21 янв 19, 00:04    [21789890]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36699
flexgen
Но надо учитывать что try...catch понижает производительность.
Производительность чего понижает try...catch?
21 янв 19, 01:06    [21789917]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
aleks222
Member

Откуда:
Сообщений: 857
256k
Хочу в приложении отловить некоторые сообщения SQL сервера об ошибках и прицепить к ним юзер-фрэндли объяснения с извинениями и пр.

Например,
The UPDATE statement conflicted with the FOREIGN KEY constraint xxx . The conflict occurred in database yyy


я могу в приложении "тупо" проанализировать наличие ключевых слов и понять - это то сообщение, которое мне надо.
Вопрос: если у юзера установлен сервер с другим языком, например, русским, тогда такие сообщения будут приходить другие.

Можно ли выловить нужные мне, независимо от языка сервера?


Когда-то давно я пытался решить эту проблему.
Решение такое:
1. Делаем табличку-транслятор: ( сообщение_сервера, понятное_сообщение )
2. Приложение по получению сообщения об ошибке ищет в табличке.
3. Если нет - заносит туда сообщение_сервера.
4. Если есть - проверяет "есть ли понятное?"
5. Если есть понятное - выводит понятное.
6. Если нет понятного - выводит "как есть".

Табличку транслятор периодически ревизуют и заносят "понятное_сообщение", если его нету.
Но есть свои засады в этом варианте.
Например, иногда в сообщении выводится значение какого-нибудь параметра, который может быть разным.
В этом случае приходится переделывать сообщение_сервера в шаблон для like.
Но теряем возможность поиска по индексу.
21 янв 19, 07:04    [21789946]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
Владислав Колосов
Member

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

автор
Но надо учитывать что try...catch понижает производительность.


Откуда дровишки?
21 янв 19, 12:51    [21790145]     Ответить | Цитировать Сообщить модератору
 Re: Сообщение сервера об ошибке  [new]
L_argo
Member

Откуда:
Сообщений: 1140
flexgen
Но надо учитывать что try...catch понижает производительность.
Любой дополнительный код понижает производительность.
21 янв 19, 12:55    [21790157]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить