Отправляет email-рассылки с помощью сервиса Sendsay

Статьи по Visual C++

  Все выпуски  

Статьи по Visual C++.NET Источники данных ODBC


Информационный Канал Subscribe.Ru

P-Lib - сайт по программированию Ozon.ru
  Главная | Новости | Статьи | Каталог | Софт | Регистрация | Поиск

Новые статьи

1. ODBC API
2. «Липкие» диалоговые окна
3. SFL – Service Framework Library
4. Диагностические средства MFC
5. Как определить версию IE?
6. Routing and Remote Access Server Administration DLL
7. Internet API. Как и где его использовать
8. Использование Буфера обмена (Clipboard)
9. Как запустить одну программу из другой?

Свежие компьютерные новости

21.12.2005 На Mail.Ru открылась автомобильная барахолка
21.12.2005 Intel и BMW подписали партнёрское соглашение
21.12.2005 Бритни Спирс возглавила рейтинг запросов Yahoo
21.12.2005 Кадр дня: Новый интерфейс Windows Vista
21.12.2005 Hitachi разрабатывает винчестер ёмкостью 5 Тб
21.12.2005 Первый ноутбук NEC на основе процессора Yonah
21.12.2005 Вышла обновленная бета-версия Windows Vista

Источники данных ODBC

Сокращение ODBC означает Open Database Connectivity, т. е. открытая связь с базой данных. Этот стандарт, разработанный фирмой Microsoft, который определяет интерфейс работы с базами данных. Очень важно, что система функций API этого интерфейса позволяет получать доступ к самым разным базам данных, начиная с баз Access и FoxPro и заканчивая удалённым доступом к серверам баз данных, таким как MS Server SQL 2000.

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

Архитектура ODBC основана на использовании библиотек. На верхнем уровне находится библиотека ODBC32.DLL. Эта библиотека и предоставляет интерфейс прикладного программирования. Эта библиотека обращается к другим динамическим библиотекам, отвечающим за взаимодействие с конкретными базами данных. Все драйверы регистрируются в реестре по адресу:

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI (пользовательские DSN)
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI (системные DSN)
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI (драйверы ODBS)

Добавление нового источника данных

Как уже было сказано, вся информация о драйверах хранится в реестре. И соответственно есть несколько способов создания нового драйвера. Можно через панель управления. Чтобы это сделать, надо открыть Панель управления/Администрирование/ Источники данных (ODBC). На самом деле эта программа Odbcad32.exe. Которую можно просто запускать и требовать создать источник данных. Но можно программно создать его. Для этого используется функция SQLConfigDataSource. Кроме того, в зависимости от заданных параметров функции можно удалять и изменять источники данных. Вот её описание:

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

Если функция выполнена удачно, то она возвращает TRUE, а если не удачно – FALSE.

  • hwndParent – хэндл окна, которому будут направляться сообщения об ошибка. Если этот параметр равен NULL, эти сообщения будут подавляться.
  • fRequest – тип выполняемого действия.
  • lpszDriver – точное имя драйвера ODBC, так, как оно выглядит в диалоге настройки ODBC DSN, например "Microsoft Access Driver (*.mdb)" или "SQL Server".
  • lpszAttributes – этот параметр содержит основные параметры подключения к источнику данных.
  • Параметр fRequest может содержать следующие значения:

  • ODBC_ADD_DSN - Добавляем новый источник данных пользователя.
  • ODBC_CONFIG_DSN - Выбор конфигурации существующего источника данных пользователя.
  • ODBC_REMOVE_DSN - Удаляем существующий источник данных пользователя.
  • ODBC_ADD_SYS_DSN - Добавляем новый источник данных системы.
  • ODBC_CONFIG_SYS_DSN - Изменяем существующий источник данных системы.
  • ODBC_REMOVE_SYS_DSN - Удаляем существующий источник данных системы.
  • ODBC_REMOVE_DEFAULT_DSN - Удаляем заданный по умолчанию раздел спецификации источника данных из системы.
  • Вот параметры которые может содержать lpszAttributes:

  • DSN - название создаваемого источника данных
  • UID - имя пользователя
  • DATABASE - имя базы данных
  • PWD - пароль для подключения
  • Параметры разделены между собой символом '\0', конец строки отмечается дополнительным символом '\0'.

    DSN=CustomDsn\0UID=username\0PWD=password\0DATABASE=CustomDataBase\0\0

    Обязательным является имя DSN. Все остальные параметры могут быть запрошены при подключении к источнику данных. Хотя различные драйверы ODBC в этом отношении могут вести себя по-разному - например, для драйвера MS SQLServer обязательным параметром также является и имя сервера.

    Итак, приведу пример создания нового источника данных для Access:

    char* driver = "Microsoft Access Driver (*.mdb)";
    char* params = "DSN=MyBaseDemo\0DefaultDir=C:\\\0DBQ=D:\\db1.mdb\0";
    
    SQLConfigDataSource(NULL, ODBC_ADD_DSN, driver, params);

    Получение списка установленных источников и драйверов на компьютере

    Таких способов достаточно много. Но я опишу один из них. Он основан на использовании API функции SQLDataSources.

    SQLRETURN SQLDataSources
    (
         SQLHENV EnvironmentHandle,
         SQLUSMALLINT Direction,
         SQLCHAR * ServerName,
         SQLSMALLINT BufferLength1,
         SQLSMALLINT * NameLength1Ptr,
         SQLCHAR * Description,
         SQLSMALLINT BufferLength2,
         SQLSMALLINT * NameLength2Ptr
    );

    Для работы этой функции требуется файл sqlext.h.

    Вот сам код программы, которая получает список источников и драйверов:

    #include <sqlext.h>
    
    #pragma comment(lib, "odbc32")
    #pragma comment(lib, "odbccp32")
    #pragma comment(lib, "user32")
    
    #define MAX_BUF 1024
    
    void main()
    {
        char  datasrc[MAX_BUF] = {0};
        char  descrip[MAX_BUF] = {0};
        short rdsrc = 0, rdesc = 0;
        SQLHENV hEnv;
        SQLRETURN ret;
        ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HENV, &hEnv);
        ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,
                                (SQLPOINTER)SQL_OV_ODBC3,
                                SQL_IS_INTEGER);
        SQLSMALLINT direction = SQL_FETCH_FIRST;
        while(1)
        {
            ret = SQLDataSources(
                hEnv, direction, 
                (SQLTCHAR*)datasrc, MAX_BUF, &rdsrc,    
                (SQLTCHAR*)descrip, MAX_BUF, &rdesc);
            if(SQL_NO_DATA == ret)
                break;
            direction = SQL_FETCH_NEXT;
            CharToOem(datasrc, datasrc);
            CharToOem(descrip, descrip);
            printf("* %s (%s)\n", datasrc, descrip);
        }
        SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
        printf("\n");
     while(1)
        {
     }
    }

    Вы при необходимости можете сузить диапазон выводимых значений, указав для direction в качестве стартового параметра SQL_FETCH_FIRST_USER для пользовательских источников данных и SQL_FETCH_FIRST_SYSTEM для системных.

    То, что описано в этой статье, лишь малая часть всех возможностей языка Visual C++ для работы с базами данных. К этой теме вернусь еще в некоторых рассылках.


    Subscribe.Ru
    Поддержка подписчиков
    Другие рассылки этой тематики
    Другие рассылки этого автора
    Подписан адрес:
    Код этой рассылки: comp.soft.prog.visualc
    Архив рассылки
    Отписаться
    Вспомнить пароль

    В избранное