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


TN042. Рекомендации по драйверу ODBC для разработчиков

Примечание

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

Эта заметка описывает правила для модулей записи драйвера ODBC. Она которых общие требования и функции предполагается, что классы ODBC MFC, так и различных ожидаемого смысловых сведения. Описывается требуемой функциональности драйвера для поддержки режима 3 CRecordset открытых (forwardOnly, снимок и dynaset).

Библиотека курсоров ODBC

Классы MFC представляют функциональные возможности пользователя, во многих случаях, превышает функциональные возможности, предоставляемые большинство драйверами ODBC уровня 1. Удачно, библиотека курсоров ODBC будет уровень сам между классами базы данных и драйвером и автоматически выбирает многие из этой дополнительные функции.

Например, большинство драйверов 1.0 не поддерживают отсталую прокрутки. Библиотека курсоров может обнаружить это и кэширование строк из драйверов и представляет их запросе на вызовах FETCH_PREV в SQLExtendedFetch.

Также важно пример зависимости библиотеки курсоров позиционированные обновления. Большинство драйверов 1.0 также не имеют позиционированные обновления, но библиотека курсоров создаст выписки обновления, определяющие строку целевого объекта в источнике данных, на основе его текущих значений кэшированных данных или кэшированную значение отметки времени.

Библиотека классов никогда не использует несколько наборов строк. Поэтому несколько выписки SQLSetPos всегда применяются к строке 1 набора строк.

CDatabases

Каждое CDatabase выделяет один HDBC. (Если функция CDatabaseExecuteSQL используется, HSTMT временно выделено). Поэтому, если множественное entity_CDatabase необходимо, несколько объектов HDBC на HENV, должны поддерживать.

Классы базы данных требуют курсоров. Это будет отображаться в вызове SQL_ODBC_CURSORSSQLSetConnections, SQL_CUR_USE_ODBC.

SQLDriverConnect, SQL_DRIVER_COMPLETE используется CDatabase::Open для установления подключения к источнику данных.

Драйвер должен поддерживать = SQLGetInfo SQL_ODBC_API_CONFORMANCE >SQL_OAC_LEVEL1SQLGetInfo,SQL_ODBC_SQL_CONFORMANCE >= SQL_OSC_MINIMUM.

Для создания транзакции поддержку для CDatabase и его зависимых наборов записей SQLGetInfo,SQL_CURSOR_COMMIT_BEHAVIOR и SQL_CURSOR_ROLLBACK_BEHAVIOR должны иметь SQL_CR_PRESERVE. В противном случае будут пропущены попытки запуска элемента управления транзакции.

SQLGetInfo SQL_DATA_SOURCE_READ_ONLY должен поддерживать. Если возвращается значение «Y», никакие операции обновления не выполняются в источнике данных.

Если CDatabase открыт только для чтения, то попытка задать источник данных только для чтения будет заполнена с SQLSetConnectOption SQL_ACCESS_MODE, SQL_MODE_READ_ONLY.

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

Для отладки и SQLGetInfo SQL_DBMS_VERSQL_DBMS_NAME извлекаются из драйвера.

SQLSetStmtOption SQL_QUERY_TIMEOUT и SQL_ASYNC_ENABLE могут быть вызваны в CDatabaseHDBC.

SQLError может быть вызван со всеми аргументами NULL.

Конечно, SQLAllocEnv, SQLAllocConnect, SQLDisconnect и SQLFreeConnect, должны поддерживать.

ExecuteSQL

Помимо выделение и освобождение временное ExecuteSQL вызывает HSTMT, SQLExecDirect, SQLFetch, SQLNumResultCol и SQLMoreResults. SQLCancel может быть вызван на HSTMT.

GetDatabaseName

SQLGetInfo SQL_DATABASE_NAME будет иметь имя.

BeginTrans, CommitTrans, откат

Будут вызваны SQLSetConnectOption SQL_AUTOCOMMITSQLTransact и SQL_COMMIT, SQL_ROLLBACK и SQL_AUTOCOMMIT, если запросы выполняются транзакции.

CRecordsets

SQLAllocStmt, SQLPrepare, SQLExecute (для Открыть и Requery), SQLExecDirect (для операций обновления), SQLFreeStmt должен поддерживать. SQLNumResultCols и SQLDescribeCol будут вызваны с результатами, заданного в различные моменты времени.

SQLSetParam широко используется для привязки данных параметры и функции DATA_AT_EXEC.

SQLBindCol широко используется для регистрации расположения хранилища данных выходного столбца с ODBC.

2 Вызова SQLGetData используются, чтобы получить данные SQL_LONG_VARCHAR и SQL_LONG_VARBINARY. Пытается найти первого вызова общая длина столбца значение путем вызова функции SQLGetData с cbMaxValue 0, но с допустимым pcbValue. Если pcbValue содержит SQL_NO_TOTAL, создается исключение. В противном случае HGLOBAL выбран, и другой SQLGetData вызывается для извлечения весь результат.

Updating

Если пессимистическая запрашивается блокировка, SQLGetInfo SQL_LOCK_TYPES будет запрошенного. Если функция SQL_LCK_EXCLUSIVE не поддерживается, то возникнет исключение.

Попытки обновления CRecordset (снимок или dynaset) вызовут секунду HSTMT, выбранным. Для драйверов не поддерживающих второе HSTMT, библиотека курсоров сымитирует эту функцию. К сожалению, иногда это может означать применить текущий запрос на первом HSTMT до полного завершения перед их второй запрос HSTMT.

SQLFreeStmt SQL_CLOSESQL_RESET_PARAMS и SQLGetCursorName будут вызваны во время операции обновления.

Если CLongBinarys в outputColumns, то функции ODBC DATA_AT_EXEC должен поддерживать. Это позволяет возвращать SQL_NEED_DATA из SQLExecDirect, SQLParamData и SQLPutData.

Метод SQLRowCount вызывается после выполнения, чтобы убедиться, что только 1 запись была обновлена SQLExecDirect.

Курсоры последовательного доступа

SQLFetch Только необходимые для операций Переместить. Обратите внимание, что forwardOnly курсоры не поддерживают обновления.

Курсоры моментального снимка

Функция снимка требует поддержки SQLExtendedFetch. Как указано выше, библиотека курсоров ODBC обнаруживает, когда драйвер не поддерживает SQLExtendedFetch, и предоставляет необходимую поддержку самостоятельно.

SQLGetInfo, SQL_SCROLL_OPTIONS должен поддерживать SQL_SO_STATIC.

Курсоры динамических подмножеств

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

SQLGetInfo, SQL_ODBC_VER должно возвращать > «01».

SQLGetInfo, SQL_SCROLL_OPTIONS должен поддерживать SQL_SO_KEYSET_DRIVEN.

SQLGetInfo, SQL_ROW_UPDATES должно возвращать «Y».

SQLGetInfo, SQL_POSITIONED_UPDATES должен поддерживать SQL_PS_POSITIONED_DELETE и SQL_PS_POSITIONED_UPDATE.

Кроме того, если пессимистическая блокировка запрос, будет сделан вызов irow SQLSetPos с 1, fRefresh ЛОЖНОЕ и стадо SQL_LCK_EXCLUSIVE.

См. также

Другие ресурсы

Технические примечания по номеру

Технические примечания по категории