Московский государственный университет имени М.В.Ломоносова
Опубликован: 20.12.2005 | Доступ: свободный | Студентов: 3141 / 371 | Оценка: 4.22 / 3.86 | Длительность: 12:03:00
ISBN: 978-5-9556-0068-0
Лекция 1:

Открытый интерфейс доступа к базам данных - ODBC

Лекция 1: 1234 || Лекция 2 >

Создание источника данных с использованием ODBC API

DLL-библиотека ODBCCP32.DLL предоставляет функции ODBC API ConfigDSN и SQLConfigDataSource, позволяющие выполнять регистрацию новых источников данных или удалять информацию об источниках данных из реестра Windows (и из файла ODBC.ini).

Функция ConfigDSN позволяет добавлять, изменять или удалять источники данных и имеет следующее формальное описание:

BOOL ConfigDSN(
     HWND     hwndParent,
     WORD     fRequest,
     LPCSTR     lpszDriver,
     LPCSTR     lpszAttributes);

Для использования в среде Visual Studio функций ConfigDSN и SQLConfigDataSource следует подключить заголовочный файл odbcinst.h.

Параметр hwndParent определяет дескриптор окна или NULL. Если дескриптор не указан, то при выполнении данной функции окно с предложением уточнить параметры не отображается. Параметр fRequest указывает тип запроса, который задается одной из следующих констант:

  • ODBC_ADD_DSN - добавление нового источника данных;
  • ODBC_CONFIG_DSN - изменение существующего источника данных;
  • ODBC_REMOVE_DSN - удаление существующего источника данных.

Параметр lpszDriver содержит описание драйвера, а параметр lpszAttributes - список атрибутов в форме "ключевое слово=значение" (например: DSN=MyDB\0UID=U1\0PWD=P1\0DATABASE=DB1\0\0). Список атрибутов завершается двумя null-байтами.

При успешном завершении функция возвращает значение TRUE, в противном случае вызовом функции SQLInstallerError можно получить один из следующих кодов ошибки:

  • ODBC_ERROR_INVALID_HWND - ошибка в указании дескриптора окна;
  • ODBC_ERROR_INVALID_KEYWORD_VALUE - параметр lpszAttributes содержит ошибки;
  • ODBC_ERROR_INVALID_NAME - параметр lpszDriver не найден в системе;
  • ODBC_ERROR_INVALID_REQUEST_TYPE - параметр fRequest содержит недопустимое значение;
  • ODBC_ERROR_REQUEST_FAILED - нельзя выполнить действие, указанное параметром fRequest ;
  • ODBC_ERROR_DRIVER_SPECIFIC - ошибка конкретного драйвера.

Для записи информации об источнике данных в секцию [ODBC Data Sources] секции ODBC.INI реестра Windows функция ConfigDSN вызывает функцию SQLWriteDSNToIni, а для удаления - функцию SQLRemoveDSNFromIni.

Функция SQLConfigDataSource имеет следующее формальное описание:

BOOL SQLConfigDataSource(
     HWND      hwndParent,
     WORD     fRequest,
     LPCSTR      lpszDriver,
     LPCSTR      lpszAttributes);

Параметры функции SQLConfigDataSource аналогичны параметрам функции ConfigDSN, при этом параметр fRequest может принимать следующие значения:

  • ODBC_ADD_DSN - добавление нового пользовательского DSN;
  • ODBC_CONFIG_DSN - изменение существующего пользовательского DSN;
  • ODBC_REMOVE_DSN - удаление существующего пользовательского DSN;
  • ODBC_ADD_SYS_DSN - добавление нового системного DSN;
  • ODBC_CONFIG_SYS_DSN - изменение существующего системного DSN;
  • ODBC_REMOVE_SYS_DSN - удаление существующего системного DSN.

Функция ConfigDSN относится к группе функций установки DLL (setup DLL), а функция SQLConfigDataSource - к группе функций инсталляции DLL (Installer DLL).

При выполнении функция SQLConfigDataSource использует значение параметра lpszDriver для получения из системной информации полного пути к Setup DLL конкретного драйвера, загружает эту DLL и вызывает функцию ConfigDSN, передавая ей свой список параметров (значение параметра fRequest преобразуется к значению, принимаемому функцией ConfigDSN ). Перед вызовом ConfigDSN, в зависимости от типа обрабатываемого DSN, устанавливается режим USERDSN_ONLY (пользовательский DSN) или SYSTEMDSN_ONLY (системный DSN), а перед завершением выполнения функция SQLConfigDataSource возвращает режим BOTHDSN.

Коды возврата

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

В заголовочном файле sql.h определены следующие коды возврата:

#define SQL_SUCCESS            0
Функция выполнена успешно
#define SQL_SUCCESS_WITH_INFO  1
Функция выполнена успешно, но с уведомительным сообщением
#if (ODBCVER >= 0x0300)
#define SQL_NO_DATA           100
#endif
Больше нет строк для извлечения их из результирующего набора. В предыдущей версии ODBC API этот код возврата обозначался как SQL_NO_DATA_FOUND. В версии 3.x код возврата SQL_NO_DATA_FOUND содержатся в заголовочном файле sqlext.h
#define SQL_ERROR            (-1)
При выполнении функции произошла ошибка
#define SQL_INVALID_HANDLE   (-2)
Указан неверный дескриптор
#define SQL_STILL_EXECUTING    2
Функция, выполняемая асинхронно, пока не завершена
#define SQL_NEED_DATA         99
Для успешного выполнения данной функции следует предварительно определить необходимые данные

Первые два кода возврата определяют, что функция была выполнена, а остальные информируют о типе произошедшей ошибки.

Для определения типа кода возврата в заголовочном файле sqltypes.h введено следующее объявление:

typedef signed short            RETCODE;
Лекция 1: 1234 || Лекция 2 >