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


Функция SQLDisconnect

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

Сводка
SQLDisconnect закрывает соединение, связанное с определенным дескриптором подключения.

Синтаксис

  
SQLRETURN SQLDisconnect(  
     SQLHDBC     ConnectionHandle);  

Аргументы

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

Возвраты

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

Диагностика

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

SQLSTATE Error Description
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
01002 Ошибка отключения Произошла ошибка во время отключения. Однако отключение выполнено успешно. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
08003 Подключение не открыто (DM) Соединение, указанное в аргументе ConnectionHandle , не открыто.
25000 Недопустимое состояние транзакции Была транзакция в процессе подключения, указанного аргументом ConnectionHandle. Транзакция остается активной.
HY000 Общая ошибка Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину.
HY001 Ошибка выделения памяти Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции.
HY008 Операция отменена Асинхронная обработка была включена для ConnectionHandle. Эта функция была вызвана и до ее финширования, выполняющей функцию SQLCancelHandle, была вызвана в ConnectionHandle. Затем функция была вызвана снова в ConnectionHandle.

Функция была вызвана и до завершения выполнения SQLCancelHandle была вызвана в ConnectionHandle из другого потока в многопотоковом приложении.
HY010 Ошибка последовательности функций (DM) Асинхронно выполняющаяся функция была вызвана для ОператораHandle , связанного с ConnectionHandle , и все еще выполнялась при вызове SQLDisconnect .

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

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos были вызваны для ОператораHandle, связанного с ConnectionHandle и возвращенных SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
HY117 Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function.
HYT01 Время ожидания для подключения истекло Срок ожидания подключения истек до того, как источник данных ответил на запрос, и подключение по-прежнему активно. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Драйвер не поддерживает эту функцию (DM) Драйвер, связанный с ConnectionHandle , не поддерживает функцию.
IM017 Опрос отключен в асинхронном режиме уведомлений При использовании модели уведомлений опрос отключается.
IM018 SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции с этим дескриптором. Если предыдущий вызов функции дескриптора возвращает SQL_STILL_EXECUTING и если включен режим уведомлений, sqlCompleteAsync должен вызываться на дескрипторе для выполнения последующей обработки и завершения операции.

Комментарии

Если приложение вызывает SQLDisconnect после sqlBrowseConnect возвращает SQL_NEED_DATA и перед возвратом другого возвращаемого кода драйвер отменяет процесс просмотра подключений и возвращает подключение к несоединённому состоянию.

Если приложение вызывает SQLDisconnect во время неполной транзакции, связанной с дескриптором подключения, драйвер возвращает SQLSTATE 25000 (недопустимое состояние транзакции), указывая, что транзакция не изменяется и подключение открыто. Неполная транзакция — это транзакция, которая не была зафиксирована или откатена с помощью SQLEndTran.

Если приложение вызывает SQLDisconnect до освобождения всех инструкций, связанных с подключением, драйвер после успешного отключения от источника данных освобождает эти инструкции и все дескрипторы, которые были явно выделены для подключения. Однако если одна или несколько инструкций, связанных с подключением, по-прежнему выполняются асинхронно, SQLDisconnect возвращает SQL_ERROR со значением HY010 (ошибка последовательности функций). Кроме того, SQLDisconnect освобождает все связанные инструкции и все дескрипторы, которые были явно выделены для подключения, если подключение находится в приостановленном состоянии или если SQLDisconnect успешно отменен SQLCancelHandle.

Сведения о том, как приложение использует SQLDisconnect, см. в разделе "Отключение от источника данных" или "Драйвер".

Отключение от подключения в пуле

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

Пример кода

См . пример программы ODBC, функции SQLBrowseConnect и функции SQLConnect.

Сведения Раздел
Выделение дескриптора Функция SQLAllocHandle
подключение к источнику данных; Функция SQLConnect
Подключение к источнику данных с помощью строки подключения или диалогового окна Функция SQLDriverConnect
Выполнение операции фиксации или отката Функция SQLEndTran
Освобождение дескриптора подключения Функция SQLFreeConnect

См. также

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