/ / Изтеглете текст за грешка от грешка в SQL Server 2000 - asp.net, sql-сървър, обработка на грешки

Извличане на грешен текст от грешка в SQL Server 2000 - asp.net, sql-сървър, обработка на грешки

Имам нужда от помощ при регистриране на грешки от T-SQL в SQLServer 2000. Трябва да регистрираме грешки, в които сме попаднали, но имаме проблеми с получаването на същата информация, която бихме седяли пред SQL Server Management Studio.

Мога да получа съобщение без заместване на аргументи като това:

SELECT MSG.description from master.dbo.sysmessages MSG
INNER JOIN sys.syslanguages LANG ON MSG.msglangID=LANG.msglangid
WHERE MSG.error=@err AND LANG.langid=@@LANGID

Но не намерих никакъв начин да открия аргументите за грешка. Искам да видя:

Нарушение на ограничението MYCONSTRAINT2 на таблица MYTABLE7

не

Нарушение на ограничението% s на маса% s

Google е създал само екзотични схеми, използващи DBCC OUTPUTBUFFER, които изискват администраторски достъп и не са подходящи за производствен код. Как да получа съобщение за грешка с подмяна на аргумент?

Отговори:

2 за отговор № 1

В. Net, извличане на съобщения за грешки (и всичко, което се извежда от печат или raiserror) от sql сървъра е толкова лесно, колкото да зададете една собственост на SqlConnection ( .FireInfoMessageEventOnUserErrors = Вярно) и обработка на събитието на InfoMessage на връзката. Данните, получени от .Net, съответстват на това, което получавате в Съобщения прозорец в мрежата за резултати на SQL Server Management Studio.

Целият код влиза във функцията, която обработвасъбитието и можете да го абстрахирате, така че всичките ви връзки да сочат към един и същ метод, така че няма да се промени нищо друго в останалата част на приложението, освен двата реда код, когато създавате нови връзки, за да зададете свойството и събитие (и сте го абстрахирали, така че трябва да го направите само на едно място, нали?)

Ето линк към това, което считам за окончателно ръководство за грешка за SQL Server.
http://www.sommarskog.se/error-handling-I.html

При определени обстоятелства SQL Server ще продължи обработката дори след грешка. Вижте заглавието с етикет Какво се случва, когато възникне грешка? от предишната връзка.


1 за отговор № 2

Вижте онлайн книги за Raiserror (Описано)

Ще откриете, че синтаксисът изглежда така:

RAISERROR ( { msg_id | msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

и аргументите за грешка са, както следва:

d or I Signed integer
o Unsigned octal
p Pointer
s String
u Unsigned integer
x or X Unsigned hexadecimal

Всеки език от VB нататък има възможност да ги улови и да ви позволи да предприемете подходящи действия.

Дейв Дж


0 за отговор № 3

Всеки шанс скоро да надстроите до SQL2005? Ако е така, вероятно бихте могли да използвате техния модел TRY / CATCH, за да постигнете по-лесно това, което опитвате да направите.

Изложените в улова променливи могат да ви дадат обекта, който хвърля грешката, номера на реда, съобщение за грешка, тежест и т.н. От там можете да го регистрирате, да изпратите имейл и т.н.


0 за отговор № 4

FORMATMESSAGE (съществува и в SQL Server 2000) ви позволява да изграждате съобщения в окончателния им формат от шаблоните за системни съобщения като по-горе.

Въпреки това командата RAISERROR (което е достамного това, което самият двигател на база данни използва вътрешни обаждания, когато имате грешка) вече изпраща завършения текст, който може да бъде хванат и влез в клиента. SSMS е клиент и не генерира собствени съобщения: всички съобщения идват от двигателя на базата данни.

Съжалявам обаче, че искате да регистрирате грешката в T-SQL с помощта на T-SQL. Честно казано, не можете да използвате SQL Server 2000. Твърде много грешки са партидни и обхватни, за да се регистрира надеждно нещо.

Трябва да сте на SQL Server 2005, за да използвате TRY / CATCH / ERROR_MESSAGE, или да хванете капана в клиента и след това да използвате нещо като log4net, за да влезете обратно в SQL Server.