在VC中動態加載ODBC時的一些小細節

Windows系統子目錄中的動態鏈接庫Odbcinst.dll提供了一個可以動態地增加、修改和刪除數據源的函數SQLConfigDataSource()。該函數的原型如下:
BOOL SQLConfigDataSource(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes);
hwndParent參數是父窗口句柄。如果該值爲NULL,將不會顯示與父窗口有關的對話框。
fRequest參數可以設置爲下面的數值之一:

ODBC_ADD_DSN:增加一個新的用戶數據源;
ODBC_CONFIG_DSN:修改(配置)一個已經存在的用戶數據源;
ODBC_REMOVE_DSN:刪除一個已經存在的用戶數據源;
ODBC_ADD_SYS_DSN:增加一個新的系統數據源;
ODBC_CONFIG_SYS_DSN:修改 (配置)一個已經存在的系統數據源;
ODBC_REMOVE_SYS_DSN:刪除一個已經存在的系統數據源。

lpszDriver參數用於傳遞數據庫引擎的名字,等同於方法一中strDbType變量。
lpszAttirbutes參數是關鍵字的值,即一連串的"keyname=value"字符串,每兩個字符串之間用 "/"隔開,如"DSN=Demo/0DSN=demo/0Description=示例數據庫"。關於該參數的詳細設置請參閱MSDN中SQLConfigDataSource()函數的幫助文檔和各種ODBC驅動程序文檔。
由於VC的缺省庫文件中不包含SQLConfigDataSource()函數,因此使用該函數之前需要將odbcinst.h文件包含在工程的頭文件中,在工程的Settings屬性對話框Link屬性頁的Object/library modules編輯框中增加odbccp32.lib,同時保證系統目錄system32下有文件odbccp32.dll。
否則在link時會出現:error LNK2001: unresolved external symbol _SQLConfigDataSource@16的錯誤.
仍以Microsoft Access爲例,設置數據源名爲demo,數據源描述爲"示例數據源",那麼在需要動態加載數據源的地方加入下列代碼即可:
::SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, "Microsoft Access Driver (*.mdb)", "DSN=demo/0Description=示例數據庫");
需要注意的是在Microsoft Access Driver (*.mdb)中,"Driver" 和 "("之間一定要有一格空格,不然的話會導致函數調用失敗,筆者就是在這個上面調試花了大半個小時的時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章