Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сообщение сервера об ошибке / 11 сообщений из 11, страница 1 из 1
18.01.2019, 15:01
    #39761525
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
Хочу в приложении отловить некоторые сообщения SQL сервера об ошибках и прицепить к ним юзер-фрэндли объяснения с извинениями и пр.

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



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

Можно ли выловить нужные мне, независимо от языка сервера?
...
Рейтинг: 0 / 0
18.01.2019, 15:03
    #39761527
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
256k,
Код: sql
1.
select * from sys.messages
...
Рейтинг: 0 / 0
18.01.2019, 15:08
    #39761533
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
256kМожно ли выловить нужные мне, независимо от языка сервера?Анализировать код ошибки, а не текст.
...
Рейтинг: 0 / 0
18.01.2019, 15:22
    #39761548
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
invm256kМожно ли выловить нужные мне, независимо от языка сервера?Анализировать код ошибки, а не текст.

да, вот нашел
Код: sql
1.
547 The %ls statement conflicted with the %ls constraint "%.*ls". The conflict occurred in database "%.*ls", table "%.*ls"%ls%.*ls%ls.
...
Рейтинг: 0 / 0
18.01.2019, 15:24
    #39761553
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
256k, 547 - код ошибки если не ошибаюсь... invm вам уже сказал как делать должно.
...
Рейтинг: 0 / 0
18.01.2019, 15:30
    #39761561
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
256k,

Можно так сделать.
Пишите в расширенном свойстве ограничения понятный комментарий, затем в обработчике begin catch извлекайте этот комментарий по наименованию ограничения, которое содержится в тексте ошибки. В зависимости от языка позиция в строке будет разной. Язык определяется как @@language.
...
Рейтинг: 0 / 0
21.01.2019, 00:04
    #39762167
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
256k,

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

Пример оттуда
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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 понижает производительность.
...
Рейтинг: 0 / 0
21.01.2019, 01:06
    #39762178
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
flexgenНо надо учитывать что try...catch понижает производительность.Производительность чего понижает try...catch?
...
Рейтинг: 0 / 0
21.01.2019, 07:04
    #39762199
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
256kХочу в приложении отловить некоторые сообщения SQL сервера об ошибках и прицепить к ним юзер-фрэндли объяснения с извинениями и пр.

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



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

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

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

Табличку транслятор периодически ревизуют и заносят "понятное_сообщение", если его нету.
Но есть свои засады в этом варианте.
Например, иногда в сообщении выводится значение какого-нибудь параметра, который может быть разным.
В этом случае приходится переделывать сообщение_сервера в шаблон для like.
Но теряем возможность поиска по индексу.
...
Рейтинг: 0 / 0
21.01.2019, 12:51
    #39762316
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
flexgen,

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

Откуда дровишки?
...
Рейтинг: 0 / 0
21.01.2019, 12:55
    #39762319
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщение сервера об ошибке
flexgenНо надо учитывать что try...catch понижает производительность.Любой дополнительный код понижает производительность.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сообщение сервера об ошибке / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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