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

Откуда:
Сообщений: 115
MSSQL 2005
В приложении, при редактировании таблицы, в MSSQL возникает ошибка, например,что то типа этого
Недопустимое дублирование поля "NAME" с уникальным индексом "UNQ_NAME".(это очень не точный пример)
Текст ошибки на английском языке. Мне нужно точно интерпетировать ошибку, заменив имена столбцов БД, именами полей на экране.
Тип ошибки я могу понять по ее номеру, но вот указанные в ней наименования таблиц, полей, индексков... я не могу получить, да еще и с указанием того что это, например, имя таблицы.
Скажите, пожалуйста, может быть есть возможность получить как-то более детальную информацию по ошибке?В системных таблицах например или может где еще
спасибо
12 апр 12, 23:58    [12409111]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
sys.messages
13 апр 12, 06:27    [12409410]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8880
Если я правильно понял суть вопроса - то ни как и ни где....
13 апр 12, 08:06    [12409482]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
царевич
Member

Откуда:
Сообщений: 115
Получается, что в приложении никак нельзя определить столбец, из-за дублирования значения в котором произошла ошибка?
13 апр 12, 09:15    [12409756]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
Glory
Member

Откуда:
Сообщений: 104751
царевич
Получается, что в приложении никак нельзя определить столбец, из-за дублирования значения в котором произошла ошибка?

"Недопустимое дублирование поля "NAME" с уникальным индексом "UNQ_NAME".("
А это что тогда ?
13 апр 12, 09:29    [12409835]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
царевич
Member

Откуда:
Сообщений: 115
Glory,
т.е. единственный способ это попробовать распарсить сообщение об ошибке?
а если потом в новой версии текст ошибки сменится?! да и надо зашиваться на 1 язык всегда, а вдруг на какой то БД он будет не тот что нужен и возможности сменить не будет?! в общем как то ненадежно выглядит
13 апр 12, 09:41    [12409880]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
Glory
Member

Откуда:
Сообщений: 104751
царевич
т.е. единственный способ это попробовать распарсить сообщение об ошибке?

А вы хотели бы, что бы это сделал сервер ?

царевич
а если потом в новой версии текст ошибки сменится?!

Заказчик вынужден будет обратится к вам за новой версией.
Вы же укажите в спецификации информацию о совместимости.
Кроме того номер ошибки не поменяется


царевич
да и надо зашиваться на 1 язык всегда, а вдруг на какой то БД он будет не тот что нужен и возможности сменить не будет?! в общем как то ненадежно выглядит

Ну так а зачем вам дополнительная обработка ошибок сервера ?
Чем не устраивают серверные сообщения ?
13 апр 12, 09:46    [12409914]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
царевич
Member

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

"Ну так а зачем вам дополнительная обработка ошибок сервера ?
Чем не устраивают серверные сообщения ?"

1. Серверные сообщения на англ. языке, сменить его нет возможности, т.к. делаю проект не с 0
2. Пользователь не понимает ошибки сервера, т.к. там фигурируют имена полей БД, имена индексов..., а на экране пользователя поля называются совсем по другому.
3. Еще подскажите, пожалуйста, где получить список ошибок сервера на русском с их кодами.
13 апр 12, 10:04    [12410021]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
царевич,

2. Пользователь способный верно интерпретировать серверные сообщения зовется не "пользователь".
3.
SELECT * FROM sys.messages
13 апр 12, 10:16    [12410079]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Экскьюз ми, вам же сообщения только на русском... Тогда:
SELECT * FROM sys.messages WHERE language_id=1049
13 апр 12, 10:18    [12410086]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
царевич
...2. Пользователь не понимает ошибки сервера, т.к. там фигурируют имена полей БД, имена индексов..., а на экране пользователя поля называются совсем по другому...
Вообще-то, это говорит о плохой проработке архитектуры приложения...
У вас пользователи прямо в студии что ли вносят и редактируют данные? Если так, то разработчик приложения имел ввиду наверное продвинутых пользователей, которым не надо разжевывать сообщения об ошибках.
Для непродвинутых рисуют клиентский интерфейс и вот там уже делаю всё, что требуется - в том числе, например, запрещают вводить дублирующиеся данные с соответствующим разъяснением.

Сообщение было отредактировано: 13 апр 12, 10:24
13 апр 12, 10:23    [12410110]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
царевич
Member

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

т.е. предлагаете сделать окно для ввода, в котором,перед выполнением update/insert проверять все возможные ошибки пользователя, т.е. выполнить селекты для проверки дублирования по уникальным полям, проверить соответсвие целостности foreign_key и пр. и только после этого выполнять update/insert/delete ?
13 апр 12, 10:42    [12410199]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
царевич
tpg,

т.е. предлагаете сделать окно для ввода, в котором,перед выполнением update/insert проверять все возможные ошибки пользователя, т.е. выполнить селекты для проверки дублирования по уникальным полям, проверить соответсвие целостности foreign_key и пр. и только после этого выполнять update/insert/delete ?
Почему нет?
При наличии правильных индексов это не сильно обременит сервер и не будет портить нервы пользователям от осознания своей никчемности.

Сообщение было отредактировано: 13 апр 12, 10:49
13 апр 12, 10:49    [12410246]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
царевич
Member

Откуда:
Сообщений: 115
tpg,
тогда на создание и тестирование 1 справочника будет уходить гораздо больше времени. Придется писать много очень похожего кода.
Да и мысль что я проверяю, то что сервер и так будет проверять не очень радует, кроме того сервер сделает это явно лучше, а у меня возможны ошибки на "пустом месте".
Хотел именно сделать универсальный инструмент, что вообще не тратить время на обработку ошибок в каждом окне. Т.е. что бы объект сам разбирался, что за ошибка и на какое поле в интерфейсе она ссылается, а затем выдавал более понятное сообщение об ошибке чем выдает БД
13 апр 12, 11:07    [12410385]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
aleks2
Guest
царевич
Хотел именно сделать универсальный инструмент, что вообще не тратить время на обработку ошибок в каждом окне. Т.е. что бы объект сам разбирался, что за ошибка и на какое поле в интерфейсе она ссылается, а затем выдавал более понятное сообщение об ошибке чем выдает БД

1. Вас же первого уволят, если такое изобретут.
2. Это вопрос уже давно обсуждался. "Более-менее универсальное" решение - таблица трансляции
"сообщение сервера" -> "то же самое, но по-русски и применительно к вашей базе".
3. Трансляцию выполняет клиентское приложение по получении ошибки.
4. Если транслировать невозможно - показывает оригинал.
13 апр 12, 11:14    [12410446]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
царевич
tpg,
тогда на создание и тестирование 1 справочника будет уходить гораздо больше времени. Придется писать много очень похожего кода.
Да и мысль что я проверяю, то что сервер и так будет проверять не очень радует, кроме того сервер сделает это явно лучше, а у меня возможны ошибки на "пустом месте".
Хотел именно сделать универсальный инструмент, что вообще не тратить время на обработку ошибок в каждом окне. Т.е. что бы объект сам разбирался, что за ошибка и на какое поле в интерфейсе она ссылается, а затем выдавал более понятное сообщение об ошибке чем выдает БД
Да, было бы удобно, если бы нормально возвращались метаданные, скажем, при нарушении констрейна получать идентификатор (или имя) этого констрейна.

Но сейчас такое невозможно, придётся смириться с этим. Можете написать предложение на connect.microsoft.com. Если вас поддержат другие покупатели сиквела, то могут реализовать.

А пока что нормальный выход - делать проверки для частых случаев, пользователю писать либо сообщения по результатам анализа, либо общего вида, и писать сообщения "как есть" в логи для анализа разработчиками и/или DBA
13 апр 12, 12:30    [12411179]     Ответить | Цитировать Сообщить модератору
 Re: Получение элементов ссобщения об ошибке  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
12108252
SELECT * FROM dbo.fnErrorParams()
13 апр 12, 13:24    [12411601]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить