Поделиться через


Функция SQLSetConnectAttr

Соответствие
Представлена версия: соответствие стандартам ODBC 3.0: ISO 92

Сводка
SQLSetConnectAttr задает атрибуты, управляющие аспектами подключений.

Примечание.

Дополнительные сведения о том, что диспетчер драйверов сопоставляет эту функцию с тем, когда приложение ODBC 3*.x* работает с драйвером ODBC 2*.x*, см. в разделе "Функции сопоставления замены для обратной совместимости приложений".

Синтаксис

  
SQLRETURN SQLSetConnectAttr(  
     SQLHDBC       ConnectionHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

Аргументы

ConnectionHandle
[Input] Дескриптор подключения

Attribute
[Входные данные] Атрибут для задания, указанный в разделе "Комментарии".

ValuePtr
[Входные данные] Указатель на значение, связанное с атрибутом. В зависимости от значения Атрибута значение ValuePtr будет незначимым целым числом или указывает на строку символов, завершаемую значением NULL. Обратите внимание, что целочисленный тип аргумента Атрибута не может быть фиксированной длиной, см. в разделе "Комментарии" подробные сведения.

StringLength
[Входные данные] Если атрибут является атрибутом ODBC, а ValuePtr указывает на символьную строку или двоичный буфер, этот аргумент должен быть длиной *ValuePtr. Для символьных строковых данных этот аргумент должен содержать количество байтов в строке.

Если атрибут является атрибутом ODBC, а ValuePtr является целым числом, StringLength игнорируется.

Если атрибут является атрибутом, определенным драйвером, приложение указывает характер атрибута диспетчеру драйверов, задав аргумент StringLength . StringLength может иметь следующие значения:

  • Если ЗначениеPtr является указателем на символьную строку, СтрокаLength — это длина строки или SQL_NTS.

  • Если ЗначениеPtr является указателем на двоичный буфер, приложение помещает результат макроса SQL_LEN_BINARY_ATTR(длина) в StringLength. Это помещает отрицательное значение в StringLength.

  • Если ЗначениеPtr является указателем на значение, отличное от символьной строки или двоичной строки, строка StringLength должна иметь значение SQL_IS_POINTER.

  • Если Значение ValuePtr содержит значение фиксированной длины, СтрокаLength либо SQL_IS_INTEGER, либо SQL_IS_UINTEGER соответствующим образом.

Возвраты

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE или SQL_STILL_EXECUTING.

Диагностика

Когда SQLSetConnectAttr возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, связанное значение SQLSTATE можно получить путем вызова SQLGetDiagRec с помощью HandleType SQL_HANDLE_DBC и дескриптора ConnectionHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращаются SQLSetConnectAttr и объясняются каждый из них в контексте этой функции. Нотация "(DM)" предшествует описаниям SQLSTATEs, возвращаемых диспетчером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.

Драйвер может вернуть SQL_SUCCESS_WITH_INFO, чтобы предоставить сведения о результатах настройки параметра.

SQLSTATE Ошибка Описание
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
01S02 Изменено значение параметра Драйвер не поддерживал значение, указанное в ValuePtr , и заменил аналогичное значение. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
08002 Имя подключения, используемое Аргумент атрибута был SQL_ATTR_ODBC_CURSORS, и драйвер уже подключен к источнику данных.
08003 Подключение не открыто (DM) Значение атрибута было указано, что требует открытого подключения, но ConnectionHandle не был в подключенном состоянии.
08S01 Сбой связи Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции.
24000 Недопустимое состояние курсора Аргумент атрибута был SQL_ATTR_CURRENT_CATALOG, а результирующий набор ожидался.
25 000 Недопустимая операция во время локальной транзакции Подключение было в локальной транзакции при попытке включить в распределенное подключение транзакций (DTC), задав атрибут подключения SQL_ATTR_ENLIST_IN_DTC.

Подключение уже зарегистрировано в DTC.

Подключение было заказано в подключении к распределенной транзакции, а локальная транзакция была запущена путем установки SQL_ATTR_AUTOCOMMIT для SQL_AUTOCOMMIT_OFF.
3D000 Недопустимое имя каталога Аргумент атрибута был SQL_CURRENT_CATALOG, и указанное имя каталога было недопустимым.
HY000 Общая ошибка Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину.
HY001 Ошибка выделения памяти Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции.
HY008 Операция отменена Асинхронная обработка была включена для ConnectionHandle. Функция SQLSetConnectAttr была вызвана и до завершения выполнения функции SQLCancelHandle была вызвана в ConnectionHandle, а затем функция SQLSetConnectAttr была вызвана снова в ConnectionHandle.

Или функция SQLSetConnectAttr была вызвана и до завершения выполнения SQLCancelHandle была вызвана в ConnectionHandle из другого потока в многопотоковом приложении.
HY009 Недопустимое использование указателя NULL Аргумент Атрибута определил атрибут подключения, который требовал строковое значение, и аргумент ValuePtr был пустым указателем.
HY010 Ошибка последовательности функций (DM) Асинхронно выполняющаяся функция была вызвана для оператора StatementHandle, связанного с ConnectionHandle, и по-прежнему выполнялась при вызове SQLSetConnectAttr.

(DM) асинхронно выполняющаяся функция (не эта) была вызвана для ConnectionHandle и по-прежнему выполнялась при вызове этой функции.

(DM) SQLExecute, SQLExecDirect или SQLMoreResults был вызван для одного из дескрипторов инструкций, связанных с ConnectionHandle и возвращенных SQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos были вызваны для ОператораHandle, связанного с ConnectionHandle и возвращенных SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.

(DM) SQLBrowseConnect был вызван для ConnectionHandle и возвращен SQL_NEED_DATA. Эта функция была вызвана до того, как SQLBrowseConnect вернул SQL_SUCCESS_WITH_INFO или SQL_SUCCESS.
HY011 Атрибут не может быть задан сейчас Аргумент атрибута был SQL_ATTR_TXN_ISOLATION, и транзакция была открыта.
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
HY024 Недопустимое значение атрибута Учитывая указанное значение атрибута , недопустимое значение было указано в ValuePtr. (Диспетчер драйверов возвращает этот sqlSTATE только для атрибутов подключения и инструкций, которые принимают дискретный набор значений, например SQL_ATTR_ACCESS_MODE или SQL_ATTR_ASYNC_ENABLE. Для всех других атрибутов подключения и инструкции драйвер должен проверить значение, указанное в ValuePtr.)

Аргумент атрибута был SQL_ATTR_TRACEFILE или SQL_ATTR_TRANSLATE_LIB, а ValuePtr — пустая строка.
HY090 Недопустимая длина строки или буфера (DM) *ValuePtr — это символьная строка, а аргумент StringLength меньше 0, но не был SQL_NTS.
HY092 Недопустимый идентификатор атрибута или параметра (DM) Значение, указанное для атрибута аргумента, недопустимо для версии ODBC, поддерживаемой драйвером.

(DM) Значение, указанное для атрибута аргумента, было атрибутом только для чтения.
HY114 Драйвер не поддерживает асинхронное выполнение асинхронной функции на уровне подключения (DM) Приложение попыталось включить асинхронное выполнение функции с SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE для драйвера, который не поддерживает асинхронные операции подключения.
HY117 Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function.
HY121 Библиотеку курсоров и пул с поддержкой драйверов нельзя включить одновременно Дополнительные сведения см. в разделе "Пул подключений с поддержкой драйверов".
HYC00 Необязательный компонент не реализован Значение, указанное для атрибута аргумента, было допустимым атрибутом подключения ODBC или оператора для версии ODBC, поддерживаемой драйвером, но не поддерживается драйвером.
HYT01 Время ожидания для подключения истекло Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Драйвер не поддерживает эту функцию (DM) Драйвер, связанный с ConnectionHandle , не поддерживает функцию.
IM009 Не удалось загрузить библиотеку DLL перевода Драйверу не удалось загрузить библиотеку DLL перевода, указанную для подключения. Эта ошибка может быть возвращена только в том случае, если атрибут SQL_ATTR_TRANSLATE_LIB.
IM017 Опрос отключен в асинхронном режиме уведомлений При использовании модели уведомлений опрос отключается.
IM018 SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции с этим дескриптором. Если предыдущий вызов функции дескриптора возвращает SQL_STILL_EXECUTING и если включен режим уведомлений, sqlCompleteAsync должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции.
S1118 Драйвер не поддерживает асинхронное уведомление SQL_ATTR_ASYNC_DBC_EVENT задано (после подключения), но асинхронное уведомление не поддерживается драйвером.

Если атрибут является атрибутом инструкции, SQLSetConnectAttr может возвращать любые SQLSTATEs, возвращаемые SQLSetStmtAttr.

Комментарии

Общие сведения об атрибутах подключения см. в разделе "Атрибуты подключения".

В настоящее время определенные атрибуты и версия ODBC, в которой они были представлены, отображаются в таблице далее в этом разделе; Ожидается, что для использования различных источников данных будут определены дополнительные атрибуты. Диапазон атрибутов зарезервирован ODBC; Разработчики драйверов должны зарезервировать значения для собственного использования драйвера из Open Group.

Примечание.

Возможность задавать атрибуты инструкции на уровне подключения путем вызова SQLSetConnectAttr устарела в ODBC 3*.x*. Приложения ODBC 3*.x* никогда не должны задавать атрибуты инструкции на уровне подключения. Атрибуты инструкции ODBC 3*.x* нельзя задать на уровне подключения, за исключением атрибутов SQL_ATTR_METADATA_ID и SQL_ATTR_ASYNC_ENABLE, которые являются атрибутами подключения и атрибутами инструкции и могут быть заданы на уровне подключения или на уровне инструкции.

Драйверы ODBC 3*.x* должны поддерживать только эту функцию, если они должны работать с приложениями ODBC 2*.x*, которые устанавливают параметры инструкции ODBC 2*.x* на уровне подключения. Дополнительные сведения см. в разделе "Сопоставление SQLSetConnectOption" в приложении G. Рекомендации по драйверам для обратной совместимости.

Приложение может вызывать SQLSetConnectAttr в любое время между выделением и освобождением подключения. Все атрибуты подключения и инструкции, успешно заданные приложением для подключения, сохраняются до вызова SQLFreeHandle в соединении. Например, если приложение вызывает SQLSetConnectAttr перед подключением к источнику данных, атрибут сохраняется, даже если SQLSetConnectAttr завершается сбоем в драйвере при подключении приложения к источнику данных; если приложение задает атрибут для конкретного драйвера, атрибут сохраняется, даже если приложение подключается к другому драйверу подключения.

Некоторые атрибуты подключения можно задать только до того, как будет выполнено подключение; Другие пользователи могут быть заданы только после того, как подключение было сделано. В следующей таблице указаны атрибуты подключения, которые необходимо задать до или после завершения подключения. Указывает , что атрибут можно задать либо до, либо после подключения.

Атрибут Установка до или после подключения?
SQL_ATTR_ACCESS_MODE Либо[1]
SQL_ATTR_ASYNC_DBC_EVENT Можно использовать
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE Либо[4]
SQL_ATTR_ASYNC_DBC_PCALLBACK Можно использовать
SQL_ATTR_ASYNC_DBC_PCONTEXT Можно использовать
SQL_ATTR_ASYNC_ENABLE Либо[2]
SQL_ATTR_AUTO_IPD Можно использовать
SQL_ATTR_AUTOCOMMIT Либо[5]
SQL_ATTR_CONNECTION_DEAD После
SQL_ATTR_CONNECTION_TIMEOUT Можно использовать
SQL_ATTR_CURRENT_CATALOG Либо[1]
SQL_ATTR_DBC_INFO_TOKEN После
SQL_ATTR_ENLIST_IN_DTC После
SQL_ATTR_LOGIN_TIMEOUT Перед
SQL_ATTR_METADATA_ID Можно использовать
SQL_ATTR_ODBC_CURSORS Перед
SQL_ATTR_PACKET_SIZE Перед
SQL_ATTR_QUIET_MODE Можно использовать
SQL_ATTR_TRACE Можно использовать
SQL_ATTR_TRACEFILE Можно использовать
SQL_ATTR_TRANSLATE_LIB После
SQL_ATTR_TRANSLATE_OPTION После
SQL_ATTR_TXN_ISOLATION Либо[3]

[1] SQL_ATTR_ACCESS_MODE и SQL_ATTR_CURRENT_CATALOG можно задать до или после подключения в зависимости от драйвера. Однако приложения взаимодействия задают их перед подключением, так как некоторые драйверы не поддерживают изменение этих приложений после подключения.

[2] SQL_ATTR_ASYNC_ENABLE необходимо задать перед активным оператором.

[3] SQL_ATTR_TXN_ISOLATION можно задать только в том случае, если в соединении нет открытых транзакций. Некоторые атрибуты подключения поддерживают подстановку аналогичного значения, если источник данных не поддерживает значение, указанное в *ValuePtr. В таких случаях драйвер возвращает SQL_SUCCESS_WITH_INFO и SQLSTATE 01S02 (значение параметра изменено). Например, если атрибут SQL_ATTR_PACKET_SIZE и *ValuePtr превышает максимальный размер пакета, драйвер заменяет максимальный размер. Чтобы определить заменяемое значение, приложение вызывает SQLGetConnectAttr.

[4] Если SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE задано перед открытием подключения, диспетчер драйверов установит атрибут драйвера при загрузке драйвера во время вызова SQLBrowseConnect, SQLConnect или SQLDriverConnect. Перед вызовом SQLBrowseConnect, SQLConnect или SQLDriverConnect диспетчер драйверов не знает, к какой драйверу подключаться и не знает, поддерживает ли драйвер асинхронные операции подключения. Поэтому диспетчер драйверов всегда возвращает SQL_SUCCESS. Но если драйвер не поддерживает асинхронные операции подключения, вызов SQLBrowseConnect, SQLConnect или SQLDriverConnect завершится ошибкой.

[5] Если для SQL_ATTR_AUTOCOMMIT задано значение FALSE, приложения должны вызывать SQLEndTran(SQL_ROLLBACK), если любой API возвращает SQL_ERROR, чтобы обеспечить согласованность транзакций.

Формат сведений в буфере *ValuePtr зависит от указанного атрибута. SQLSetConnectAttr принимает сведения о атрибутах в одном из двух разных форматов: строку символов, завершаемую null, или целочисленное значение. Формат каждого из них указывается в описании атрибута. Строки символов, на которые указывает аргумент ValuePtr SQLSetConnectAttr, имеют длину байтов StringLength.

Аргумент StringLength игнорируется, если длина определяется атрибутом, как и для всех атрибутов, введенных в ODBC 2*.x* или более ранней версии.

Attribute Содержимое ValuePtr
SQL_ATTR_ACCESS_MODE (ODBC 1.0) Значение SQLUINTEGER. SQL_MODE_READ_ONLY используется драйвером или источником данных в качестве индикатора того, что подключение не требуется для поддержки инструкций SQL, вызывающих обновление. Этот режим можно использовать для оптимизации стратегий блокировки, управления транзакциями или других областей, соответствующих драйверу или источнику данных. Драйвер не требуется, чтобы предотвратить отправку таких инструкций в источник данных. Поведение драйвера и источника данных при запросе обработки инструкций SQL, которые не доступны только для чтения во время подключения только для чтения, определяется реализацией. SQL_MODE_READ_WRITE — это значение по умолчанию.
SQL_ATTR_ASYNC_DBC_EVENT (ODBC 3.8) Значение SQLPOINTER, которое является дескриптором событий.

Уведомление о завершении асинхронных функций включено путем вызова SQLSetConnectAttr с атрибутом SQL_ATTR_ASYNC_STMT_EVENT и указанием дескриптора событий. Примечание. Метод уведомления не поддерживается библиотекой курсоров. Приложение получит сообщение об ошибке, если он пытается включить библиотеку курсоров через SQLSetConnectAttr, когда метод уведомления включен.
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE (ODBC 3.8) Значение SQLUINTEGER, которое включает или отключает асинхронное выполнение выбранных функций в дескрипторе подключения. Дополнительные сведения см. в разделе "Асинхронное выполнение" (метод опроса).

SQL_ASYNC_DBC_ENABLE_ON = включить асинхронную операцию для указанных функций, связанных с подключением.

SQL_ASYNC_DBC_ENABLE_OFF = (по умолчанию) Отключите асинхронную операцию для указанных функций, связанных с подключением.

Настройка SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE всегда синхронна (т. е. никогда не возвращается SQL_STILL_EXECUTING).

Асинхронное выполнение операций инструкций включено с SQL_ATTR_ASYNC_ENABLE.
SQL_ATTR_ASYNC_DBC_PCALLBACK (ODBC 3.8) Значение SQLPOINTER, указывающее на структуру контекста.

Только диспетчер драйверов может вызывать функцию SQLSetStmtAttr драйвера с этим атрибутом.
SQL_ATTR_ASYNC_DBC_PCONTEXT (ODBC 3.8) Значение SQLPOINTER, указывающее на структуру контекста.

Только диспетчер драйверов может вызывать функцию SQLSetStmtAttr драйвера с этим атрибутом.
SQL_ATTR_ASYNC_ENABLE (ODBC 3.0) Значение SQLULEN, указывающее, выполняется ли функция с оператором указанного соединения асинхронно:

SQL_ASYNC_ENABLE_OFF = отключить асинхронную поддержку асинхронного выполнения уровня подключения для операций инструкций (по умолчанию).

SQL_ASYNC_ENABLE_ON = включить асинхронную поддержку асинхронного выполнения уровня подключения для операций инструкций.

Этот атрибут можно задать, возвращает ли SQLGetInfo тип сведений SQL_ASYNC_MODE SQL_AM_CONNECTION или SQL_AM_STATEMENT.
SQL_ATTR_AUTO_IPD (ODBC 3.0) Значение SQLUINTEGER только для чтения, указывающее, поддерживается ли автоматическое заполнение IPD после вызова SQLPrepare :

SQL_TRUE = автоматическое заполнение IPD после вызова SQLPrepare поддерживается драйвером.

SQL_FALSE = автоматическое заполнение IPD после вызова SQLPrepare не поддерживается драйвером. Серверы, которые не поддерживают подготовленные инструкции, не смогут автоматически заполнять IPD.

Если SQL_TRUE возвращается для атрибута подключения SQL_ATTR_AUTO_IPD, можно задать атрибут инструкции, SQL_ATTR_ENABLE_AUTO_IPD включить или отключить автоматическое заполнение IPD. Если SQL_ATTR_AUTO_IPD SQL_FALSE, SQL_ATTR_ENABLE_AUTO_IPD нельзя задать для SQL_TRUE. Значение по умолчанию SQL_ATTR_ENABLE_AUTO_IPD равно значению SQL_ATTR_AUTO_IPD.

Этот атрибут подключения может быть возвращен SQLGetConnectAttr, но не может быть задан SQLSetConnectAttr.
SQL_ATTR_AUTOCOMMIT (ODBC 1.0) Значение SQLUINTEGER, указывающее, следует ли использовать режим автоматической фиксации или ручной фиксации:

SQL_AUTOCOMMIT_OFF = драйвер использует режим ручной фиксации, и приложение должно явно зафиксировать или откатить транзакции с SQLEndTran.

SQL_AUTOCOMMIT_ON = драйвер использует режим автоматической подключения. Каждая инструкция фиксируется сразу после выполнения. Это значение по умолчанию. Все открытые транзакции подключения фиксируются, если SQL_ATTR_AUTOCOMMIT задано значение SQL_AUTOCOMMIT_ON, чтобы изменить режим автоматической фиксации на режим автоматической фиксации вручную.

Дополнительные сведения см. в разделе "Режим фиксации". Важно. Некоторые источники данных удаляют планы доступа и закрывают курсоры для всех операторов подключения при каждом фиксации инструкции; режим автокоммитирования может привести к тому, что это произойдет после выполнения каждой инструкции nonquery или при закрытии курсора для запроса. Дополнительные сведения см. в SQL_CURSOR_COMMIT_BEHAVIOR и SQL_CURSOR_ROLLBACK_BEHAVIOR типах сведений в SQLGetInfo и эффекте транзакций на курсорах и подготовленных инструкциях.

При выполнении пакета в режиме автоматической подключения возможны два способа. Весь пакет может рассматриваться как единица автоматического объединения, или каждая инструкция в пакете рассматривается как единица автоматического объединения. Некоторые источники данных могут поддерживать оба этих поведения и могут предоставлять способ выбора одного или другого. Определяется ли пакет как единица автоматического объединения или каждая отдельная инструкция в пакете является автоматической.
SQL_ATTR_CONNECTION_DEAD

(ODBC 3.5)
Значение SQLUINTEGER только для чтения, указывающее состояние подключения. Если SQL_CD_TRUE, подключение было потеряно. Если SQL_CD_FALSE, подключение по-прежнему активно.
SQL_ATTR_CONNECTION_TIMEOUT (ODBC 3.0) Значение SQLUINTEGER, соответствующее количеству секунд, которое нужно ожидать завершения любого запроса по подключению, прежде чем вернуться в приложение. Драйвер должен возвращать SQLSTATE HYT00 (истекло время ожидания) в любое время, когда возможно время ожидания в ситуации, не связанной с выполнением запроса или именем входа.

Если Значение ValuePtr равно 0 (по умолчанию), время ожидания отсутствует.
SQL_ATTR_CURRENT_CATALOG (ODBC 2.0) Символьная строка, содержащая имя каталога, используемого источником данных. Например, в SQL Server каталог является базой данных, поэтому драйвер отправляет инструкцию USE базы данных в источник данных, где база данных является базой данных , указанной в *ValuePtr. Для одноуровневого драйвера каталог может быть каталогом, поэтому драйвер изменяет текущий каталог в каталог, указанный в *ValuePtr.
SQL_ATTR_DBC_INFO_TOKEN (ODBC 3.8 Значение SQLPOINTER, используемое для возврата маркера сведений о подключении в дескриптор DBC, если параметр SQLRateConnection (*pRating) не равен 100.

SQL_ATTR_DBC_INFO_TOKEN доступен только для установки. Для получения этого значения невозможно использовать SQLGetConnectAttr или SQLGetConnectOption . SQLSetConnectAttr диспетчера драйверов не принимает SQL_ATTR_DBC_INFO_TOKEN, так как приложение не должно задавать этот атрибут.

Если драйвер возвращает SQL_ERROR после настройки SQL_ATTR_DBC_INFO_TOKEN, подключение, полученное из пула, будет освобождено. Затем диспетчер драйверов попытается получить другое подключение из пула. Дополнительные сведения см. в статье "Разработка осведомленности о пуле подключений" в драйвере ODBC.
SQL_ATTR_ENLIST_IN_DTC (ODBC 3.0) Значение SQLPOINTER, указывающее, следует ли использовать драйвер ODBC в распределенных транзакциях, координируемых службами компонентов Майкрософт.

Передайте объект транзакции OLE DTC, указывающий транзакцию для экспорта в SQL Server или SQL_DTC_DONE, чтобы завершить связь DTC подключения.

Клиент вызывает метод OLE ITransactionDispenser::BeginTransaction, чтобы начать транзакцию MS DTC и создать объект транзакции MS DTC, представляющий транзакцию. Затем приложение вызывает SQLSetConnectAttr с параметром SQL_ATTR_ENLIST_IN_DTC, чтобы связать объект транзакции с подключением ODBC. Все связанные действия базы данных будут выполняться под защитой транзакции MS DTC. Приложение вызывает SQLSetConnectAttr с SQL_DTC_DONE, чтобы завершить связь DTC подключения. Дополнительные сведения см. в документации по MS DTC.
SQL_ATTR_LOGIN_TIMEOUT (ODBC 1.0) Значение SQLUINTEGER, соответствующее количеству секунд для ожидания завершения запроса на вход перед возвращением в приложение. Значение по умолчанию зависит от драйвера. Если значение ValuePtr равно 0, время ожидания отключено, и попытка подключения будет ожидать неограниченное время ожидания.

Если указанное время ожидания превышает максимальное время ожидания входа в источнике данных, драйвер заменяет это значение и возвращает значение SQLSTATE 01S02 (значение параметра изменено).
SQL_ATTR_METADATA_ID (ODBC 3.0) Значение SQLUINTEGER, определяющее способ обработки строковых аргументов функций каталога.

Если SQL_TRUE, строковый аргумент функций каталога рассматривается как идентификаторы. Дело не является значительным. Для неустранимых строк драйвер удаляет все конечные пробелы, а строка сложена в верхний регистр. Для строк с разделителями драйвер удаляет все начальные или конечные пробелы и принимает буквально все, что находится между разделителями. Если для одного из этих аргументов задано значение NULL, функция возвращает SQL_ERROR и SQLSTATE HY009 (недопустимое использование указателя NULL).

Если SQL_FALSE, строковые аргументы функций каталога не рассматриваются как идентификаторы. Дело является значительным. Они могут содержать шаблон строкового поиска или нет в зависимости от аргумента.

Значение по умолчанию — SQL_FALSE.

Аргумент TableType sqlTables, который принимает список значений, не влияет на этот атрибут.

SQL_ATTR_METADATA_ID также можно задать на уровне инструкции. (Это единственный атрибут подключения, который также является атрибутом оператора.)

Дополнительные сведения см. в разделе "Аргументы" в функциях каталога.
SQL_ATTR_ODBC_CURSORS (ODBC 2.0) Значение SQLULEN, указывающее, как диспетчер драйверов использует библиотеку курсоров ODBC:

SQL_CUR_USE_IF_NEEDED = Диспетчер драйверов использует библиотеку курсоров ODBC, только если это необходимо. Если драйвер поддерживает параметр SQL_FETCH_PRIOR в SQLFetchScroll, диспетчер драйверов использует возможности прокрутки драйвера. В противном случае используется библиотека курсоров ODBC.

SQL_CUR_USE_ODBC = Диспетчер драйверов использует библиотеку курсоров ODBC.

SQL_CUR_USE_DRIVER = Диспетчер драйверов использует возможности прокрутки драйвера. Этот параметр принимается по умолчанию.

Дополнительные сведения о библиотеке курсоров ODBC см . в приложении F: библиотека курсоров ODBC. Предупреждение. Библиотека курсоров будет удалена в будущей версии Windows. Избегайте использования этой функции в новых рабочих областях разработки и планируете изменять приложения, которые в настоящее время используют эту функцию. Корпорация Майкрософт рекомендует использовать функции курсора драйвера.
SQL_ATTR_PACKET_SIZE (ODBC 2.0) Значение SQLUINTEGER, указывающее размер сетевого пакета в байтах. Примечание. Многие источники данных либо не поддерживают этот параметр, либо только могут возвращать, но не задавать размер сетевого пакета.

Если указанный размер превышает максимальный размер пакета или меньше минимального размера пакета, драйвер заменяет это значение и возвращает значение SQLSTATE 01S02 (значение параметра изменено).

Если приложение устанавливает размер пакета после того, как подключение уже сделано, драйвер вернет SQLSTATE HY011 (атрибут не может быть задан сейчас).
SQL_ATTR_QUIET_MODE (ODBC 2.0) Дескриптор окна (HWND).

Если дескриптор окна является пустым указателем, драйвер не отображает диалоговые окна.

Если дескриптор окна не является пустым указателем, он должен быть родительским дескриптором приложения. Это значение по умолчанию. Драйвер использует этот дескриптор для отображения диалоговых окон. Примечание. Атрибут подключения SQL_ATTR_QUIET_MODE не применяется к диалоговым окнам, отображаемым SQLDriverConnect.
SQL_ATTR_TRACE (ODBC 1.0) Значение SQLUINTEGER, указывающее диспетчеру драйверов, следует ли выполнять трассировку:

SQL_OPT_TRACE_OFF = трассировка (по умолчанию)

SQL_OPT_TRACE_ON = трассировка

При включении трассировки диспетчер драйверов записывает каждый вызов функции ODBC в файл трассировки. Примечание. Если трассировка включена, диспетчер драйверов может возвращать SQLSTATE IM013 (ошибка файла трассировки) из любой функции.

Приложение задает файл трассировки с параметром SQL_ATTR_TRACEFILE. Если файл уже существует, диспетчер драйверов добавляется в файл. В противном случае он создает файл. Если трассировка включена и файл трассировки не указан, диспетчер драйверов записывает в файл SQL. LOG в корневом каталоге.

Приложение может задать переменную ODBCSharedTraceFlag для динамической трассировки. Затем трассировка включена для всех приложений ODBC, работающих в настоящее время. Если приложение отключает трассировку, оно отключено только для этого приложения.

Если ключевое слово Trace в системной информации имеет значение 1, если приложение вызывает SQLAllocHandle с помощью HandleType SQL_HANDLE_ENV, трассировка включена для всех дескрипторов. Он включен только для приложения, которое называется SQLAllocHandle.

Вызов SQLSetConnectAttr с атрибутом SQL_ATTR_TRACE не требует допустимого аргумента ConnectionHandle и не возвращает SQL_ERROR если ConnectionHandle имеет значение NULL. Этот атрибут применяется ко всем подключениям.
SQL_ATTR_TRACEFILE (ODBC 1.0) Строка символов, завершающая значение NULL, содержащая имя файла трассировки.

Значение по умолчанию атрибута SQL_ATTR_TRACEFILE указывается с ключевым словом TraceFile в системной информации. Дополнительные сведения см. в подразделе ODBC.

Вызов SQLSetConnectAttr с атрибутом SQL_ATTR_TRACEFILE не требует допустимого аргумента ConnectionHandle и не возвращает SQL_ERROR, если ConnectionHandle недопустим. Этот атрибут применяется ко всем подключениям.
SQL_ATTR_TRANSLATE_LIB (ODBC 1.0) Строка символов, завершающая значение NULL, содержащая имя библиотеки, содержащей функции SQLDriverToDataSource и SQLDataSourceToDriver , к которым драйвер обращается для выполнения таких задач, как перевод символов. Этот параметр может быть указан только в том случае, если драйвер подключен к источнику данных. Параметр этого атрибута будет сохраняться в разных подключениях. Дополнительные сведения о переводе данных см. в справочнике по библиотекам DLL перевода и функции перевода.
SQL_ATTR_TRANSLATE_OPTION (ODBC 1.0) 32-разрядное значение флага, передаваемое библиотеке DLL перевода. Этот атрибут можно указать, только если драйвер подключен к источнику данных. Сведения о переводе данных см. в разделе БИБЛИОТЕК DLL перевода.
SQL_ATTR_TXN_ISOLATION (ODBC 1.0) 32-разрядная маска, которая задает уровень изоляции транзакций для текущего подключения. Приложение должно вызвать SQLEndTran для фиксации или отката всех открытых транзакций в соединении, прежде чем вызывать SQLSetConnectAttr с помощью этого параметра.

Допустимые значения ValuePtr можно определить путем вызова SQLGetInfo с InfoType равным SQL_TXN_ISOLATION_OPTIONS.

Описание уровней изоляции транзакций см. в описании типа сведений SQL_DEFAULT_TXN_ISOLATION в SQLGetInfo и уровнях изоляции транзакций.

[1] Эти функции можно вызывать асинхронно, только если дескриптор реализации является дескриптором реализации, а не дескриптором приложения.

Пример кода

См. раздел SQLConnect.

Сведения Смотрите
Выделение дескриптора Функция SQLAllocHandle
Возврат параметра атрибута подключения Функция SQLGetConnectAttr

См. также

Справочник по API ODBC
Файлы заголовков ODBC