摘 要 本文介紹了ODBC的運行機制,著重討論了VisualC++1.5下應用MFC進行ODBC編程的方法。
關鍵詞 ODBC 連接 MFC
中圖分類號: TP312 文獻標識碼:A
1 開放數據庫連接
ODBC(OpenDataBaseConnectivity,開放數據庫連接)是微軟開放服務結構中有關數據庫的一個組成部分。它建立了一組規范,并提供了一組應用程序調用接口。用這樣一組接口建立的應用程序,對數據庫的操作不依賴于任何數據庫管理系統,不直接與任何DBMS打交道,由此可實現應用程序對不同DBMS的共享。數據庫操作的“數據源”對應用程序是透明的,所有的數據庫操作由對應DBMS的ODBC驅動程序(ODBCDriver)完成。
2 ODBC管理器
在ODBC中,數據源是一個重要的概念,它是數據庫位置和數據庫類型等連接信息的總和。數據源在使用前必須通過ODBC管理器(Administrator)進行登錄。在登錄數據源時,要搞清數據源名(Datasourcename)、數據庫文件名(Databasename)和數據表格名(Tablename)這三者的概念和相互關系:數據源實際是一種數據連接的抽象,數據源名是登錄時賦予的“連接”的名稱,以供應用程序使用,至于該數據源下連接的是哪一個數據庫,則由數據庫文件名指出(如Access2.0forMSOffics中的.mdb文件);一個數據庫文件中可以包括若干個數據表格(table)和其他內容。在關系文件中,應用程序最終的操作目標即是這些表格中的行(row記錄)和列(columns字段)數據。對于foxprow數據源,數據庫文件名是“路徑名”,而該路徑下的所有數據文件(*.dbf)都屬于該“數據庫文件”名下的數據表格(table)。
3 ODBC應用編程
在VisualC++中,MFC(MicrosoftFoundationClass基本類庫)是經過對Windows應用程序中各個部件進行類的抽象而建立的一組預定義的類,如窗口基類(CWnd)、各種窗口派生類等等,這些類在應用程序中可直接使用,不需要重新定義。在MFC中,也為ODBC預定義了幾個類,其中主要的是數據庫類(CDatabase)和記錄集合類(CRecoredset)。這兩個類既有聯系又有區別,在應用程序中,可以分別使用,也可以同時使用,每一類也可以同時存在多個對象。CDatabase的每一個對象代表了一個數據源的連接,CRecordset的每一個對象代表了從一個數據表中按預定的查詢條件獲得的記錄的集合,一般說來,前者適宜于對數據源下的某個數據表格進行整體操作,后者用于對所選的記錄集合進行處理。
在應用編程時,一般使用CDatabase和CRecordset的派生類。假設派生類分別為CUserdb和CUserset,而在應用類CUserClass中,使用了一個CUserdb對象(m-db)和一個Cuserset對象(m-recset)。
3.1 m-db連接數據源
m-db在完成定義構造后,要調用CDatabase的打開(Open)函數以進行數據源的實際連接:
m-db.Open(lpszDSN,bExclusive,bReadOnly,lpszConnect);
打開函數需要輸入四個參數。lpszDSN:要連接的數據源的名字,如果lpszDSN=NULL且lpszConnect中也沒有指明數據源名,則該調用會自動出現一個對話框列出所有可用的數據源(名),讓用戶選擇。bExclusive:只支持“假”(False)值,表示為共享(share)方式連接。因此,應用程序在運行前,一定要裝入share.exe或在Windows的system.ini中裝入vshare.386。ReadOnly:指明數據源操作方式是“只讀”還是可以修改。lpszConnect:指明連接字符串,包括數據源名、用戶標識碼、口令等信息。該字符串必須以“ODBC;”開頭,表示該連接是與一個ODBC數據源的連接(考慮以后版本支持非ODBC數據源)。
3.2 m-db操作數據
數據源打開后,即可對數據庫文件中的數據表格進行操作,操作以調用SQL語句方式進行,可直接通過ODBCAPI函數,或者CDatabase類成員函數ExecuteSQL。數據表名在SQL語句中指定,如下語句則在所在的數據源中的clerk表中插入一個記錄,記錄的name字段值為\"chen\"。
m-db.ExecuteSQL(\"insertintoclerk(name)value(’chen’)\");3.m-recset連接數據m-recset在構造時,可傳入一個CDatabase對象指針,作為m-recset的數據源,當為NULL時,必須重載CRecordset的函數GetDefaultConnect,以提供數據源連接字符串(相當于m-db.Open中的lpszConnect)。如下則表示連接名為COMPANY的數據源(當傳入了合法的CDatabase對象指針時,該函數將不被調用)。
參考文獻
[1] 張韓雙.Visual C++中實現數據庫連接[J].科技信息(科學教研).2012(24).
[2] 飛思科技產品研發中心.Java靈感編程[M].北京:電子工業出版社,2002.
[3] 張洪斌.Java程序設計百事通[M].北京:清華大學出版社,2001.