幾種注冊O(shè)DBC數(shù)據(jù)源的方法
ODBC(Open Database Connectivity,開放式數(shù)據(jù)庫互連)是一種應(yīng)用程序接口 (API) 規(guī)范。它定義了一個(gè)標(biāo)準(zhǔn)例程集,使用它們應(yīng)用程序可訪問數(shù)據(jù)源中的數(shù)據(jù)。應(yīng)用程序通過引用 API 的函數(shù)可以直接使用 ODBC,或利用數(shù)據(jù)訪問對象 (DAO) 或遠(yuǎn)程數(shù)據(jù)對象 (RDO) 來使用ODBC。但是,在實(shí)現(xiàn)ODBC時(shí),我們必須首先配置ODBC環(huán)境,進(jìn)行數(shù)據(jù)源的注冊,這樣才能在對數(shù)據(jù)庫進(jìn)行編程時(shí),對數(shù)據(jù)源進(jìn)行連接、訪問和操作。本文介紹幾種常用的注冊O(shè)DBC數(shù)據(jù)源的方法。
手工配置
1.ODBC數(shù)據(jù)源管理器
在進(jìn)行數(shù)據(jù)庫開發(fā)時(shí),為了達(dá)到配置ODBC,進(jìn)行DSN定義注冊的目的,微軟給出了一個(gè)手工操作的解決方法。在Windows 9X操作系統(tǒng)的控制面板中,有一個(gè)名為“ODBC數(shù)據(jù)源(32位)”的圖標(biāo),可以通過它激活專門為用戶設(shè)置ODBC環(huán)境的程序(ODBC Data Source Administrator,ODBC數(shù)據(jù)源管理器)。在Windows 2000操作系統(tǒng)中,上述圖標(biāo)被放置在控制面板的“管理工具”里面。
這個(gè)用于設(shè)置ODBC環(huán)境的程序叫做桌面驅(qū)動(dòng)程序,它支持?jǐn)?shù)種DBMS(Database Management System,數(shù)據(jù)庫管理系統(tǒng))。當(dāng)用戶想增加一個(gè)數(shù)據(jù)源和一個(gè)所需要的驅(qū)動(dòng)程序時(shí),可以通過ODBC數(shù)據(jù)源管理器的配置對話框配置特定類型的數(shù)據(jù)庫。大多數(shù)情況下,在編寫對數(shù)據(jù)庫操作的程序時(shí),我們至少需要知道諸如數(shù)據(jù)庫文件名、系統(tǒng)(本地或遠(yuǎn)程)、文件夾等信息,同時(shí)要給數(shù)據(jù)源命名。
2.定義數(shù)據(jù)源的類型
用戶可以定義以下三種類型的數(shù)據(jù)源:
用戶數(shù)據(jù)源:作為位于計(jì)算機(jī)本地的用戶數(shù)據(jù)源而創(chuàng)建的,并且只能被創(chuàng)建這個(gè)數(shù)據(jù)源的用戶所使用;
系統(tǒng)數(shù)據(jù)源:作為屬于計(jì)算機(jī)或系統(tǒng)而不是特定用戶的系統(tǒng)數(shù)據(jù)源而創(chuàng)建的,用戶必須有訪問權(quán)才能使用;
文件數(shù)據(jù)源:指定到文件中作為文件數(shù)據(jù)源而定義的,任何已經(jīng)正確地安裝了驅(qū)動(dòng)程序的用戶皆可以使用這種數(shù)據(jù)源。
3.數(shù)據(jù)源注冊的步驟
以Microsoft Access為例,如果在C:\myfile\文件夾里創(chuàng)建了一個(gè)名為myexample.mdb的數(shù)據(jù)庫文件,其注冊步驟如下:
在控制面板里找到“ODBC數(shù)據(jù)源”圖標(biāo),打開數(shù)據(jù)源管理器的交互界面;
筆者創(chuàng)建的數(shù)據(jù)庫文件是供本機(jī)上的用戶使用的,所以這里選擇“用戶 DSN”;
然后按下“添加”按鈕,在彈出的數(shù)據(jù)源管理器對話框里,為自己所要?jiǎng)?chuàng)建的數(shù)據(jù)源選擇一個(gè)驅(qū)動(dòng)程序,本文的數(shù)據(jù)庫文件是用Microsoft Access創(chuàng)建的,所以要選擇“Microsoft Access Driver (*.mdb)”;
按“完成”按鈕后,進(jìn)入一個(gè)標(biāo)題為“ODBC Microsoft Access 安裝”的界面,在其中設(shè)置“數(shù)據(jù)源名”為“mydatasource”,選取數(shù)據(jù)庫文件 “C:\myfile\myexample.mdb”,然后確定即可。
這樣我們就完成了一個(gè)簡單的ODBC數(shù)據(jù)源的注冊。當(dāng)然,在以上的步驟中,用戶可以根據(jù)自己的不同需要,設(shè)置不同的選項(xiàng)。
注冊結(jié)束后,我們便可以在對數(shù)據(jù)庫的編程中,操作該數(shù)據(jù)庫了。
在VB中注冊數(shù)據(jù)源
在VB中對數(shù)據(jù)庫進(jìn)行編程時(shí),可以利用RegisterDataSource方法為ODBC數(shù)據(jù)源輸入連接信息到 Windows 注冊表中。它的語法是:
RegisterDataSource DSN, driver, silent, attributes
其中參數(shù)代表的含義分別為:
DSN:字符串表達(dá)式,它是在引用數(shù)據(jù)源描述信息塊時(shí)所使用的名字。例如,如果數(shù)據(jù)源是一個(gè)ODBC遠(yuǎn)程數(shù)據(jù)庫,這就是服務(wù)器的名字;如果是用戶DSN,則是注冊的數(shù)據(jù)源的名字。
drive:字符串表達(dá)式,表示ODBC驅(qū)動(dòng)程序的名稱。它并不是 ODBC 驅(qū)動(dòng)程序動(dòng)態(tài)連接庫 (DLL) 文件名。例如,SQL Server 是驅(qū)動(dòng)程序名,而 SQLSRVR.DLL 是 DLL 文件名。必須安裝ODBC 及相應(yīng)的驅(qū)動(dòng)程序。
silent:布爾類型值,如果不想顯示 ODBC 驅(qū)動(dòng)程序?qū)υ捒颍靡蕴崾局付?qū)動(dòng)程序的信息,該值就為 True;如果希望顯示 ODBC 驅(qū)動(dòng)程序?qū)υ捒,該值就?False。如果 silent 為 True,那么attributes必須包含所有必需的指定驅(qū)動(dòng)程序的信息。
attributes:字符串表達(dá)式,它是一個(gè)要添加到 ODBC.INI 文件中的關(guān)鍵字列表。編寫程序時(shí),可以根據(jù)需要選擇若干attributes的參數(shù)進(jìn)行設(shè)置。
例如:我們可以編寫如下的VB程序,達(dá)到與上面手工注冊一樣的目的。程序清單如下:
Sub RegisterDataSource()
Dim strAttribs As String
’建造關(guān)鍵字字符串。
’C:\myfile\myexample.l.mdb數(shù)據(jù)庫文件名(包含路徑)
strAttribs =“DBQ=” _
& “C:\myfile\myexample.mdb” _
& Chr$(13) & “OemToAnsi=No” _
& Chr$(13) & “SERVER=SEQUEL” _
& Chr$(13) & “Network=DBNMPNTW” _
& Chr$(13) & “Database=WorkDB”_
& Chr$(13) &“Address=\\SEQUEL\PIPE\SQL\QUERY”
’建立新的注冊的 DSN。
rdoEngine.rdoRegisterDataSource “mydatasource”,
“Microsoft Access Driver (*.mdb)”, True,
strAttribs
End Sub
Private Sub Form_Load()
Call rdoRegisterDataSource
End Sub
注意:為了在代碼中使用rdoEngine和遠(yuǎn)程數(shù)據(jù)對象,必須先在“引用"對話框中設(shè)置一個(gè)到 Microsoft Remote Data Object 2.0 對象庫的引用,否則在第一次引用rdoEngine 對象時(shí)會(huì)導(dǎo)致編譯錯(cuò)誤。
利用注冊表合并
1.解決思路
考查ODBC數(shù)據(jù)源注冊后對Windows注冊表的修改情況,我們可以發(fā)現(xiàn)所注冊的數(shù)據(jù)源對Windows注冊表的影響關(guān)鍵集中在[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI]里。
這樣,我們導(dǎo)出[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI],每次以之為模板,把所要注冊的數(shù)據(jù)源信息加入到注冊表導(dǎo)出文件的對應(yīng)位置,然后再將該文件與系統(tǒng)注冊表合并即可。
2.具體操作
首先,我們要弄清楚Regedit 及其參數(shù)的含義。Regedit是打開系統(tǒng)注冊表的命令。在“開始\運(yùn)行\(zhòng)”中輸入即可。它的三個(gè)參數(shù)含義如下:
Regedit /e myfile.reg :表示把注冊表文件導(dǎo)出到myfile.reg 文件中,相當(dāng)于復(fù)制整個(gè)注冊表文件到myfile.reg中;
Regedit /c myfile.reg:表示把myfile.reg導(dǎo)入注冊表,相當(dāng)于用該文件的內(nèi)容覆蓋了注冊表的內(nèi)容;
Regedit /s myfile.reg :表示把myfile.reg文件的內(nèi)容與注冊表文件的內(nèi)容進(jìn)行合并。
我們只需在注冊表中將有用的部分導(dǎo)出,而后將所要注冊的數(shù)據(jù)源的信息加入,再與系統(tǒng)注冊表合并就可以了。這個(gè)合并的過程,我們既可以手工輸入來實(shí)現(xiàn),也可以通過編程實(shí)現(xiàn)自動(dòng)合并。
注意:為了防止誤操作,一定要將系統(tǒng)注冊表作一次備份。
小 結(jié)
從安全的角度考慮,筆者首推利用在Windows控制面板中的ODBC數(shù)據(jù)源管理工具來進(jìn)行數(shù)據(jù)源注冊,以免因?qū)ψ员淼牟皇旎蚴韬鲈斐刹槐匾膿p失。當(dāng)然,還有一些應(yīng)用工具,可以實(shí)現(xiàn)對ODBC數(shù)據(jù)源的注冊,用戶可以根據(jù)不同的需求選擇使用。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |