Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQLSTATEs предоставляют подробные сведения о причине предупреждения или ошибки. SQLSTATEs в этом руководстве основаны на тех, которые содержатся в спецификации ISO/IEC CLI, хотя те SQLSTATEs, которые начинаются на IM, специфичны для ODBC.
В отличие от кодов возврата, SQLSTATEs в этом руководстве являются рекомендациями, а драйверы не требуются для их возврата. Таким образом, хотя драйверам следует возвращать правильный SQLSTATE при обнаружении любой ошибки или предупреждения, приложения не должны рассчитывать, что это всегда будет происходить. Причины этой ситуации двояки:
Неполноты Хотя в этом руководстве содержится большое количество ошибок и предупреждений, а также возможные причины этих ошибок и предупреждений, оно не завершено и, вероятно, никогда не будет; Реализации драйверов просто различаются слишком много. Любой указанный драйвер, вероятно, не возвращает все SQLSTATEs, перечисленные в этом руководстве, и может возвращать SQLSTATEs, не перечисленные в этом руководстве.
Сложности Некоторые ядра СУБД - особенно реляционные ядра СУБД - возвращают буквально тысячи ошибок и предупреждений. Драйверы для таких двигателей вряд ли сопоставляют все эти ошибки и предупреждения с SQLSTATEs из-за усилий, неуточненности сопоставлений, большого размера результирующего кода и низкой пользы результирующего кода, что часто приводит к возвращению ошибок программирования, которых не следует встречать во время выполнения. Таким образом, драйверы должны сопоставить столько ошибок и предупреждений, сколько разумно, и обязательно сопоставить эти ошибки и предупреждения, на которых может основываться логика приложения, например SQLSTATE 01004 (усеченные данные).
Так как SQLSTATEs не возвращаются надежно, большинство приложений просто отображают их пользователю вместе с соответствующим диагностическим сообщением, которое часто настраивается на определенную ошибку или предупреждение, которое произошло, и машинный код ошибки. При этом редко возникает потеря функциональных возможностей, так как приложения не могут использовать логику программирования в большинстве SQLSTATEs в любом случае. Например, предположим, что SQLExecDirect возвращает SQLSTATE 42000 (синтаксическая ошибка или нарушение доступа). Если инструкция SQL, вызвавшей эту ошибку, жестко закодирована или создана приложением, это ошибка программирования, и код должен быть исправлен. Если инструкция SQL введена пользователем, это ошибка пользователя, и приложение выполнило все возможное, уведомив пользователя о проблеме.
Когда приложения строят базовую логику программирования на основе SQLSTATE, они должны быть готовы к тому, что SQLSTATE может не вернуться или вернется другой SQLSTATE. Точно то, какие SQLSTATEs возвращаются надежно, можно судить только на основании опыта работы с многочисленными драйверами. Однако общая рекомендация заключается в том, что коды SQLSTATE для ошибок, возникающих в драйвере или диспетчере драйверов, в отличие от источника данных, скорее всего, будут возвращены надежно. Например, большинство драйверов, вероятно, возвращают SQLSTATE HYC00 (необязательный компонент не реализован), а меньше драйверов, вероятно, возвращают SQLSTATE 42021 (столбец уже существует).
Следующие SQLSTATEs указывают на ошибки или предупреждения во время выполнения и являются хорошими кандидатами, на которых основывать программную логику. Тем не менее, нет никаких гарантий, что все водители возвращают их.
01004 (Усеченные Данные)
01S02 (изменено значение параметра)
HY008 (операция отменена)
HYC00 (необязательная функция не реализована)
HYT00 (истек тайм-аут)
Функция SQLSTATE HYC00 (необязательно не реализована) особенно важна, так как это единственный способ, с помощью которого приложение может определить, поддерживает ли драйвер определенную инструкцию или атрибут подключения.
Полный список SQLSTATEs и возвращаемых им функций см. в приложении A: коды ошибок ODBC. Подробное описание условий, при которых каждая функция может возвращать определенную функцию SQLSTATE, см. в этой функции.