一、动态创建ODBC数据源
ODBC API提供了动态创建数据源的函数SQLConfigDataSource。该函数的原型如下:
BOOL SQLConfigDataSource ( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes );
参数说明如下:
(1)hwndParent
指定父窗口句柄,在不需要创建数据源对话框时,可以将该参数指定为NULL。
(2)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:删除省缺的数据源说明部分。
(3)lpszDriver
指定ODBC数据引擎名称。例如:Microsoft Access Driver (*.mdb)、SQL Server,Microsoft ODBC for Oracle等。
(4)lpszAttributes
指定ODBC数据源属性,包含配置数据源所必要的一组关键字-值的列表。部分关键字描述如下:
DSN:数据源名称;
FILEDSN:文件数据源名称;
DRIVER:数据驱动的描述;例如:SQL Server, ORACLE等。
UID:用户ID;
PWD:UID对应的口令,如果没有口令,也可为空字符串;
SAVEFILE:保存维持当前成功连接的关键字属性值的.dsn文件名称;
DATABASE:数据库名称;
DBQ:数据库文件绝对路径(包含文件名);
DEFAULTDIR:缺省数据库文件路径(不包含文件名);
注意:
1)如果lpszAttributes提供的信息不够完善,在创建过程中就会出现对话框要求用户提供相应信息。
2)每两个Key-Name值之间用' '隔开,最后一个Key-Name值后面有两个' '。
3)运行regedit打开注册表,依次打开HKEY_CURRENT_USER->Software->ODBC->ODBC.INI,可以看到已注册的DSN,可以仿照已注册的DSN属性来设置lpszAttributes。
4)DSN的名字必须唯一,如果要注册的DSN已被注册过,那么SQLConfigDataSource就修改原来DSN的属性。
注意:
1、使用SQLConfigDataSource函数时必须声明包含系统的odbcinst.h头文件。
2、使用SQLConfigDataSource函数时必须用到odbccp32.dll,它是Microsoft 提供的32 位ODBC安装和管理的DLL,如果是16 位必须用到odbcinst.dll,odbccp32.dll 有一个import library。解决办法是把odbccp32.lib加到我们的项目中,我们可以打开Project系统菜单项,选Add to Project子菜单,在其中选Files项,打开VC安装目录下的vclib目录,文件类型选Library Files(.lib) , 选择其中odbccp32.lib后按OK键。同时将ODBCCP32.DLL放于系统子目录下。
举例如下:
CString strDir; ::GetCurrentDirectory(MAX_PATH, strDir.GetBuffer(MAX_PATH + 1)); strDir.ReleaseBuffer(); TCHAR szTempPath[MAX_PATH + 1] = {'