Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Соответствие
Введенная версия: Соответствие стандартам ODBC 3.0: ISO 92
Сводка
SQLGetStmtAttr возвращает текущую настройку атрибута оператора.
Замечание
Для получения дополнительной информации о том, на что Driver Manager отображает эту функцию при ODBC 3. x приложение работает с ODBC 2. драйвер x , см. функции замены отображения для обратной совместимости приложений.
Syntax
SQLRETURN SQLGetStmtAttr(
SQLHSTMT StatementHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StringLengthPtr);
Arguments
ОператорHandle
[Входные данные] Дескриптор инструкции.
Атрибут
[Ввод] Атрибут для поиска.
ValuePtr
[Выход] Указатель на буфер, в котором возвращается значение атрибута, указанного в Атрибуте.
Если ValuePtr равен NULL, StringLengthPtr всё равно вернёт общее количество байтов (за исключением символа null-termination для символьных данных), доступных для возврата в буфере, на который указывает ValuePtr.
BufferLength
[Входные данные] Если атрибут является атрибутом ODBC, а ValuePtr указывает на символьную строку или двоичный буфер, этот аргумент должен быть длиной *ValuePtr. Если Attribute — это атрибут, определённый ODBC, а *ValuePtr — целое число, BufferLength игнорируется. Если значение, возвращаемое в *ValuePtr , является строкой Unicode (при вызове SQLGetStmtAttrW), то аргумент BufferLength должен быть чётным числом.
Если Attribute — это атрибут, определяемый драйвером, приложение указывает природу атрибута Driver Manager, устанавливая аргумент BufferLength . BufferLength может иметь следующие значения:
Если *ValuePtr — указатель на строку символа, то BufferLength — это длина строки или SQL_NTS.
Если *ValuePtr является указателем на двоичный буфер, то приложение размещает результат макроса SQL_LEN_BINARY_ATTR(длина) в BufferLength. Это ставит отрицательное значение в BufferLength.
Если *ValuePtr — это указатель на значение, отличное от строки символа или бинарной строки, то BufferLength должен иметь значение SQL_IS_POINTER.
Если *ValuePtr содержит тип данных фиксированной длины, то BufferLength — это либо SQL_IS_INTEGER, либо SQL_IS_UINTEGER, в зависимости от необходимости.
StringLengthPtr
[Выход] Указатель на буфер, в который можно вернуть общее количество байт (за исключением символа нулевой терминации), доступных для возврата в *ValuePtr. Если значение атрибута — это строка символа, и количество доступных для возврата байтов больше или равно BufferLength, данные в *ValuePtr усечают до BufferLength минус длину символа null-termination и нулево-заканчиваются драйвером.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR или SQL_INVALID_HANDLE.
Diagnostics
Когда SQLGetStmtAttr возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE можно получить, вызвав SQLGetDiagRec с помощью HandleType SQL_HANDLE_STMT и HandleHandleStatementHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращает SQLGetStmtAttr , и каждое из них объясняется в контексте этой функции; обозначение «(DM)» предшествует описаниям SQLSTATE, возвращаемым менеджером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Общее предупреждение | Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.) |
| 01004 | Строковые данные, усеченные справа | Данные, возвращаемые в *ValuePtr , были усечены до BufferLength минус длина символа нулевой терминации. Длина неусечённого значения строки возвращается в *StringLengthPtr. (Функция возвращает SQL_SUCCESS_WITH_INFO.) |
| 24000 | Недопустимое состояние курсора | Аргумент Attribute был SQL_ATTR_ROW_NUMBER и курсор не был открыт, или курсор располагался до начала набора результатов или после окончания результата. |
| HY000 | Общая ошибка | Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в аргументе MessageText , описывает ошибку и её причину. |
| HY001 | Ошибка выделения памяти | Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции. |
| HY010 | Ошибка последовательности функций | (DM) Асинхронно выполняющаяся функция была вызвана для дескриптора соединения, связанного с ОператоромHandle. Эта асинхронная функция всё ещё выполнялась, когда была вызвана функция SQLGetStmtAttr . (DM) асинхронно выполняющаяся функция была вызвана для StatementHandle и по-прежнему выполнялась при вызове этой функции. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos были вызваны для ОператораHandle и возвращены SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов. |
| HY013 | Ошибка управления памятью | Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти. |
| HY090 | Недопустимая длина строки или буфера | (DM) *ValuePtr — это строка символа, а BufferLength был меньше нуля, но не равен SQL_NTS. |
| HY092 | Некорректный идентификатор атрибута/опции | Значение, указанное для аргумента Attribute , не было действительным для версии ODBC, поддерживаемой драйвером. |
| HY109 | Недопустимое положение курсора | Аргумент Атрибута был SQL_ATTR_ROW_NUMBER, и строка была удалена или не могла быть извлечена. |
| HY117 | Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. | (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function. |
| HYC00 | Необязательный компонент не реализован | Значение, указанное для аргумента Attribute , было действительным атрибутом оператора ODBC для версии ODBC, поддерживаемой драйвером, но не поддерживалось самим драйвером. |
| HYT01 | Время ожидания для подключения истекло | Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Драйвер не поддерживает эту функцию | (DM) Драйвер, соответствующий ОператорHandle , не поддерживает функцию. |
Comments
Для общей информации об атрибутах утверждений см. раздел Атрибуты утверждений.
Вызов SQLGetStmtAttr возвращает в *ValuePtr значение атрибута оператора, указанного в Атрибуте. Это значение может быть либо значением SQLULEN, либо строкой символа с нулевой терминацией. Если значение является значением SQLULEN, некоторые драйверы могут записывать только нижний 32- или 16-битный буфер и оставлять бит высшего порядка без изменений. Поэтому приложения должны использовать буфер SQLULEN и инициализировать значение в 0 перед вызовом этой функции. Также аргументы BufferLength и StringLengthPtr не используются. Если значение — строка с null-termination, приложение указывает максимальную длину этой строки в аргументе BufferLength , и драйвер возвращает длину этой строки в буфере *StringLengthPtr .
Чтобы позволить приложениям, вызывающим SQLGetStmtAttr , работать с ODBC 2. x драйверов, вызов SQLGetStmtAttr отображается в Driver Manager в SQLGetStmtOption.
Следующие атрибуты операторов являются только для чтения, поэтому их можно получить с помощью SQLGetStmtAttr, но не устанавливать SQLSetStmtAttr:
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_ROW_NUMBER
Для списка атрибутов, которые можно задать и извлечь, см. SQLSetStmtAttr.
Связанные функции
| Сведения о | Смотри |
|---|---|
| Возврат параметра атрибута подключения | Функция SQLGetConnectAttr |
| Установка атрибута соединения | Функция SQLSetConnectAttr |
| Задание атрибута инструкции | Функция SQLSetStmtAttr |