Как программно создать источник данных?

Автор: Игорь Вартанов
Опубликовано: 30.04.2001
Версия текста: 1.0

Для этой цели служит функция SQLConfigDataSource(). Она позволяет создать пользовательский или системный источник данных (DSN - DataSource Name). Эта же функция позволяет модифицировать или удалить DSN.

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

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

Параметры разделены между собой символом '\0', конец строки отмечается дополнительным символом '\0'.

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

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

///////////////////////////////////////////////////////////
//
//  Пример создания источника данных для 
//  ODBC драйвера для Microsoft Excel 97
//

#include <windows.h>
#include <odbcinst.h>

#pragma comment(lib, "odbccp32")
#pragma comment(lib, "user32")

void main()
{
    char* driver = "Microsoft Excel Driver (*.xls)";
    char* params = "DSN=MyTable\0DefaultDir=D:\\Document\0"
                   "DBQ=D:\\Document\\MyTable.xls\0";

    // Создадим пользовательский DSN
    SQLConfigDataSource(NULL, ODBC_ADD_DSN, driver, params);
}

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

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

Информацию о том, как правильно заполнять строку params, можно извлечь самостоятельно, создавая при помощи ODBC-администратора источники данных для различных драйверов Вашей системы и анализируя состав параметров и присвоенные им значения ключей реестра, относящихся к созданным источникам. Надеюсь также, что не сильно шокирую Вас, если скажу, что приведенный выше пример был написан именно так.


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