Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Когда приложение ODBC 2.x обновляется до ODBC 3.x, оно должно быть записано таким образом, чтобы оно работало с драйверами ODBC 2.x и 3.x . Приложение должно включать условный код, чтобы использовать все преимущества функций ODBC 3.x .
Атрибут среды SQL_ATTR_ODBC_VERSION должен иметь значение SQL_OV_ODBC2. Это гарантирует, что драйвер работает как драйвер ODBC 2.x с учетом изменений, описанных в разделе "Изменения поведения".
Если приложение будет использовать любой из функций, описанных в разделе "Новые функции", условный код следует использовать для определения того, является ли драйвер ODBC 3.x или ODBC 2.x драйвером. Приложение использует SQLGetDiagField и SQLGetDiagRec для получения ODBC 3.x SQLSTATEs при обработке ошибок в этих фрагментах условного кода. Следует учитывать следующие моменты о новых функциональных возможностях:
Приложение, затронутое изменением размера набора строк, должно быть осторожным, чтобы не вызывать SQLFetch , если размер массива больше 1. Эти приложения должны заменить вызовы SQLExtendedFetch вызовами SQLSetStmtAttr , чтобы задать атрибут инструкции SQL_ATTR_ARRAY_STATUS_PTR и SQLFetchScroll, чтобы они имели общий код, который работает с драйверами ODBC 3.x и ODBC 2.x . Так как SQLSetStmtAttr с SQL_ATTR_ROW_ARRAY_SIZE будет заменен на SQLSetStmtAttr с SQL_ROWSET_SIZE для драйверов ODBC 2.x, приложения могут просто задать SQL_ATTR_ROW_ARRAY_SIZE для операций множественного извлечения.
Большинство приложений, которые обновляются, на самом деле не влияют на изменения в кодах SQLSTATE. Для затронутых приложений можно выполнить автоматический поиск и замену в большинстве случаев, используя таблицу преобразования ошибок в разделе "Сопоставление SQLSTATE" для преобразования кодов ошибок ODBC 3.x в коды ODBC 2.x. Поскольку диспетчер драйверов ODBC 3.x будет выполнять сопоставление ODBC 2.x SQLSTATEs на ODBC 3.x SQLSTATEs, разработчикам приложений нужно проверять только ODBC 3.x SQLSTATEs и не беспокоиться о включении ODBC 2.x SQLSTATEs в условный код.
Если приложение использует типы данных даты, времени и метки времени, приложение может объявить себя приложением ODBC 2.x и использовать существующий код вместо использования кода кондиционирования.
Обновление должно также включать следующие шаги.
Вызовите SQLSetEnvAttr перед выделением подключения, чтобы задать для атрибута среды SQL_ATTR_ODBC_VERSION значение SQL_OV_ODBC2.
Замените все вызовы SQLAllocEnv, SQLAllocConnect или SQLAllocStmt вызовами SQLAllocHandle соответствующим аргументом HandleType SQL_HANDLE_ENV, SQL_HANDLE_DBC или SQL_HANDLE_STMT.
Замените все вызовы SQLFreeEnv или SQLFreeConnect на вызовы SQLFreeHandle с соответствующим аргументом типа HandleType: SQL_HANDLE_DBC или SQL_HANDLE_STMT.
Замените все вызовы SQLSetConnectOption вызовами SQLSetConnectAttr. Если задать атрибут, значение которого является строкой, задайте аргумент StringLength соответствующим образом. Измените аргумент атрибута с SQL_XXXX на SQL_ATTR_XXXX.
Замените все вызовы SQLGetConnectOption вызовами SQLGetConnectAttr. При получении строкового или двоичного атрибута задайте bufferLength соответствующее значение и передайте аргумент StringLength . Измените аргумент атрибута с SQL_XXXX на SQL_ATTR_XXXX.
Замените все вызовы SQLSetStmtOption вызовами SQLSetStmtAttr. Если задать атрибут, значение которого является строкой, задайте аргумент StringLength соответствующим образом. Измените аргумент атрибута с SQL_XXXX на SQL_ATTR_XXXX.
Замените все вызовы SQLGetStmtOption вызовами SQLGetStmtAttr. При получении строкового или двоичного атрибута задайте bufferLength соответствующее значение и передайте аргумент StringLength . Измените атрибутный аргумент атрибута с SQL_XXXX на SQL_ATTR_XXXX.
Замените все вызовы SQLTransact вызовами SQLEndTran. Если самый правый верный дескриптор в вызове SQLTransact является дескриптором среды, аргумент HandleType SQL_HANDLE_ENV должен использоваться в вызове SQLEndTran с соответствующим аргументом Handle. Если самый правый действительный дескриптор в вызове SQLTransact является дескриптором подключения, то аргумент HandleType SQL_HANDLE_DBC должен быть использован в вызове SQLEndTran вместе с соответствующим аргументом Handle.
Замените все вызовы SQLColAttributes вызовами SQLColAttribute. Если аргумент FieldIdentifier имеет значение SQL_COLUMN_PRECISION, SQL_COLUMN_SCALE или SQL_COLUMN_LENGTH, не изменяйте ничего, кроме имени функции. В противном случае измените FieldIdentifier с SQL_COLUMN_XXXX на SQL_DESC_XXXX. Если FieldIdentifier SQL_DESC_CONCISE_TYPE и тип данных является типом данных datetime, измените его на соответствующий тип данных ODBC 3.x .
Если используются блоковые курсоры, прокручиваемые курсоры или оба, приложение выполняет следующие действия:
Задает размер набора строк, тип курсора и параллелизм курсора с помощью SQLSetStmtAttr.
Вызывает SQLSetStmtAttr, чтобы установить SQL_ATTR_ROW_STATUS_PTR, указывающим на массив записей состояния.
Вызывает SQLSetStmtAttr, чтобы установить указатель SQL_ATTR_ROWS_FETCHED_PTR на SQLINTEGER.
Выполняет необходимые привязки и выполняет инструкцию SQL.
Вызывает SQLFetchScroll в цикле для получения строк и перемещения по результирующем набору.
Если нужно выполнить выборку по закладке, приложение вызывает SQLSetStmtAttr, чтобы задать для переменной SQL_ATTR_FETCH_BOOKMARK_PTR значение закладки для строки, которую требуется получить, и вызывает SQLFetchScroll с аргументом FetchOrientation SQL_FETCH_BOOKMARK.
При использовании массивов параметров приложение выполняет следующие действия.
Вызывает SQLSetStmtAttr , чтобы задать атрибут SQL_ATTR_PARAMSET_SIZE размер массива параметров.
Вызывает функцию SQLSetStmtAttr, чтобы установить SQL_ATTR_ROWS_PROCESSED_PTR, указывая на внутреннюю переменную UDWORD.
Выполняет необходимые операции подготовки, привязки и выполнения.
Если выполнение останавливается по какой-либо причине (например, SQL_NEED_DATA), он может найти строку "текущих" параметров, проверяя расположение, на которое указывает SQL_ATTR_ROWS_PROCESSED_PTR.
Этот раздел содержит следующие подразделы.