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


ODBC. Прямой вызов функций ODBC API

Классы базы данных предоставляют более простой интерфейс для источника данных по сравнению с ODBC. Поэтому классы не могут инкапсулировать все интерфейсы API ODBC. Чтобы использовать любую функцию за пределами возможностей классов, необходимо непосредственно вызывать функции API ODBC. Например, напрямую необходимо вызывать функции каталогов ODBC (::SQLColumns, ::SQLProcedures, ::SQLTables и др.).

Примечание

Источники данных ODBC доступны с помощью классов ODBC MFC, как описано в данном разделе, или с помощью классов DAO MFC.

Чтобы вызвать функцию API ODBC напрямую, необходимо выполнить те же действия, что и для вызова функции без поддержки платформы. К ним относятся:

  • Выделение памяти для хранения всех результатов, возвращаемых функцией.

  • Передача дескриптора HDBC или HSTMT ODBC в зависимости от подписи параметров функции. Следует использовать макрос AFXGetHENV, чтобы извлечь дескриптор ODBC.

    Переменные членов CDatabase::m_hdbc и CRecordset::m_hstmt являются доступными, поэтому нет необходимости самостоятельно выделять для них память и инициализировать.

  • Возможный вызов дополнительных функций ODBC, предваряющих вызов основной функции или следующих за ним.

  • Отмена выделения памяти по окончании.

Дополнительные сведения об этих действиях см. в документации MSDN по SDK Open Database Connectivity (ODBC).

Кроме этого необходимо выполнить дополнительные действия, чтобы проверить возвращаемые значения функции, убедиться, что программа не ожидает асинхронного вызова для завершения и т. д. Эти действия можно упростить с помощью макросов AFX_SQL_ASYNC и AFX_SQL_SYNC. Дополнительные сведения см. в разделе Макросы и глобальные объекты в Справочнике по MFC.

См. также

Основные понятия

Основы ODBC