|
Программирование >> Программирование баз данных
висимости от степени серьезности ошибки подразделяются на большее число категорий, чем в других серверах NT, причем даже в документации Books Online перечислены не все эти категории. В целом значения степеней серьезности подразделяются на пять основных группировок, которые перечислены в табл. 11.1. Таблица 11.1. Классификация степеней серьезности ошибок Ошибка Описание 1-10 Чисто информационные сообщения, содержащие в тексте сообщения конкретный код ошибки. 11-16 Если блок try/catch не установлен, то при возникновении ошибок с такой степенью серьезности выполнение процедуры завершается и в клиентскую программу передается сообщение об ошибке. При этом отображается состояние завершения, соответствующее значению, присвоенному ему в сценарии. Если же блок try/catch определен, то вместо передачи сообщения об ошибке в клиентскую программу вызывается этот обработчик 17 Обычно не рекомендуется задавать это значение степени серьезности в приложе- нии, поскольку оно предназначено только для использования в СУБД SQL Server. По существу это значение указывает, что в СУБД SQL Server исчерпаны ресурсы (например, в базе данных tempdb не осталось свободного места), поэтому запрос не может быть выполнен. И в этом случае сообщение об ошибке вначале передается в блок try/catch И ТОЛЬКО после этого поступает в клиентскую программу 18-19 Оба эти значения степеней серьезности соответствуют серьезным ошибкам, причем при возникновении этих ошибок подразумевается, что для устранения их основополагающих причин требуется вмешательство системного администратора. Для обработки ошибок со степенью серьезности 19 требуется задать опцию with log, а сама информация о событии, связанном с возникновением ошибки, регистрируется в журнале событий Event Log операционной системы Windows NT или Win2K, если используются эти семейства операционных систем. Эти степени серьезности являются последними, к которым могут быть применены средства перехвата ошибок с помощью блока try/catch; сообщения с более высокой степенью серьезности передаются непосредственно в клиентскую программу 20-25 Значения степеней серьезности от 20 до 25 являются катастрофическими не только для приложений, но и для пользовательских соединений. Ошибки с такими степенями серьезности являются неисправимыми. Соединение с базой данных закрывается. Как и по отношению к ошибкам со степенью серьезности 19, необходимо использовать опцию with log. Сообщения, связанные с подобными ошибками, регистрируются в журнале Event Log (если соблюдаются все прочие условия, от которых зависит регистрация) Состояние Обозначение состояния (state) представляет собой произвольную величину. Этот параметр оператора RAISERROR был введен в действие с учетом того, что одна и та же ошибка может возникнуть в несколько местах кода. А параметр с обозначением состояния предоставляет возможность передать вместе с сообщением своего рода маркер участка кода, который показывает, где именно произошла ошибка. Числа с обозначением состояния могут находиться в пределах от 1 до 127. Совместное проведение поиска причин нарушений в работе с техническими специалистами по сопровождению корпорации Microsoft наводит на мысль о том, что они обладают какими-то недоступными для посторонних сведениями о том, какой смысл имеют некоторые обозначения состояния. Как уже было сказано, при обращении за консультацией к специалистам корпорации Microsoft по поводу какойо ошибки эти специалисты чаще всего просят сообщить информацию о состоянии и используют ее в своей работе. Параметры оператора активизации ошибки При формировании некоторых заранее определенных сообщений об ошибках допускается задавать параметры. Это позволяет формировать сообщения об ошибках динамически, более точно учитывая конкретный характер ошибки. Разработчик имеет также возможность форматировать сообщения об ошибках таким образом, чтобы при формировании этих сообщений учитывались параметры. Для преобразования постоянного сообщения об ошибке в такое сообщение, которое допускает использование динамически формируемой информации, необходимо отформатировать одну из постоянных частей этого сообщения так, чтобы в нем оставалось место для определяемого параметрами раздела сообщения. Эту задачу можно решить с использованием меток-заполнителей. Программисты, работающие на языке С или С++, могут рассматривать метки-заполнители параметров как аналоги компонентов строки формата функции printf. А для программистов, работающих на языке, отличном от С, понятие меток-заполнителей может оказаться непривычным. Все метки-заполнители начинаются со знака % и содержат в себе закодированное обозначение типа информац]и, которая передается для подстановки вместо них в текст сообщения. Перечень индикаторов типов меток-заполнителей приведен в табл. 11.2. Таблица 11.2. Индикаторы типов меток-заполнителей Индикатор типа Тип значения метки-заполнителя D Целое число со знаком. В документации Books Online указано, что допус- тимым индикатором может служить i, но автору пришлось столкнуться с затруднениями при попытке добиться его успешного применения о Восьмеричное число без знака Р Указатель S Строка и Целое число без знака X или X Шестнадцатеричное число без знака Кроме того, как показано в табл. 11.3, предусмотрена возможность задавать в качестве префикса для любого из указанных в таблице индикаторов меток-заполнителей некоторые дополнительные флажки и информацию о ширине поля вывода. Таблица 11.3. Дополнительные флажки индикаторов меток-заполнителей Флажок Назначение - (дефис или Выравнивание влево. Применение этого флажка имеет смысл, только знак минус ) если задана фиксированная ширина -I- (знак плюс ) Указывает, что если параметр представляет собой число со знаком, то знак числа должен быть показан явно Окончание табл. 11.3 Флажок Назначение О Служит для СУБД SQL Server указанием на то, что часть поля слева от числового значения необходимо дополнить нулями до достижения ширины, указанной в опции ширины # (знак диеза) Применяется только к восьмеричным и шестнадцатеричным значениям. Указывает СУБД SQL Server, что должен использоваться соответствующий префикс (о или Ох), в зависимости от того, является ли число восьмеричным или шестнадцатеричным Дополняет часть поля слева от числового значения пробелами, с учетом знака числа Наконец, предусмотрена также возможность задать ширину поля вывода, указать точность и обозначить параметр как имеющий длинный или короткий формат представления, как описано ниже. Ширина. Задается путем указания целочисленного значения, определяющего ширину поля вывода параметризованного значения. Вместо обозначения ширины может быть также задан символ звездочки (*). В таком случае СУБД SQL Server автоматически определяет ширину в зависимости от указанного значения точности. Точность. Определяет максимальное количество позиций для вывода цифр числовых данных. Длинный или короткий формат. Задается с использованием символа h (короткий формат) или 1 (длинный формат), если параметр относится к одному из числовых типов с фиксированным форматом, т.е. является десятичным, восьмеричным или шестнадцатеричным. Рассмотрим применение меток-заполнителей на примере: RAISERROR (This is а sample parameterized %s, along with a zero padding and a sign%+010d,1,1, string, 12121) После вызова на вьшолнение этого оператора формируется сообщение об ошибке, которое выглядит немного иначе по сравнению с текстом, заданным в кавычках: This is а sample parameterized string, along with a zero padding and a sign+000012121 Msg 50000, Level 1, State 1 Дополнительные значения были вставлены по порядку вместо меток-заполнителей, причем последнее значение переформатировано в соответствии с заданным форматом. Опции WITH <option> В настоящее время предусмотрены три опции, которые можно применять при активизации сообщения об ошибке отдельно и в различных сочетаниях: WITH LOG WITH SETERROR WITH NOWAIT
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |