Функция SQLDisconnect
соответствие
Представлена версия: соответствие стандартам ODBC 1.0: ISO 92
Сводка
SQLDisconnect закрывает соединение, связанное с определенным дескриптором подключения.
Синтаксис
SQLRETURN SQLDisconnect(
SQLHDBC ConnectionHandle);
Аргументы
ConnectionHandle
[Входные данные] Дескриптор подключения.
Возвращает
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 и HandleConnectionHandle. В следующей таблице перечислены значения SQLSTATE, которые обычно возвращаются SQLDisconnect и объясняются каждый из них в контексте этой функции; Нотация "(DM)" предшествует описаниям SQLSTATEs, возвращаемым диспетчером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.
SQLSTATE | Ошибка | Описание |
---|---|---|
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) Асинхронно выполняющаяся функция была вызвана для StatementHandle, связанной с ConnectionHandle и по-прежнему выполнялась при вызове SQLDisconnect. (DM) асинхронно выполняющаяся функция (не эта) была вызвана для ConnectionHandle и по-прежнему выполнялась при вызове этой функции. (DM) SQLExecute, SQLExecDirect, SQLBulkOperationsили SQLSetPos вызывается для StatementHandle, связанной с ConnectionHandle и возвращенной SQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов. |
HY013 | Ошибка управления памятью | Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти. |
HY117 | Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. | (DM) Дополнительные сведения о приостановленном состоянии см. в функции SQLEndTran. |
HYT01 | Истек срок действия времени ожидания подключения | Срок ожидания подключения истек до того, как источник данных ответил на запрос, и подключение по-прежнему активно. Период времени ожидания подключения задается через SQLSetConnectAttrSQL_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