Visual C 中的開放數(shù)據(jù)庫連接技術
摘 要 ODBC(Open DataBase Connectivity,開放數(shù)據(jù)庫連接)提供了一組應用程序調用接口和一套運行支持環(huán)境,應用程序可以使用標準的函數(shù)進行數(shù)據(jù)庫操作,而不必關心數(shù)據(jù)源來自于何種數(shù)據(jù)庫管理系統(tǒng)(DBMS),只要有相應的驅動程序即可。本文介紹了ODBC的運行機制,著重討論了Visual C 1.5下應用MFC進行ODBC編程的方法。
一、開放數(shù)據(jù)庫連接
ODBC(Open DataBase Connectivity,開放數(shù)據(jù)庫連接)是微軟開放服務結構中有關數(shù)據(jù)庫的一個組成部分。它建立了一組規(guī)范,并提供了一組應用程序調用接口。用這樣一組接口建立的應用程序,對數(shù)據(jù)庫的操作不依賴于任何數(shù)據(jù)庫管理系統(tǒng),不直接與任何DBMS打交道,由此可實現(xiàn)應用程序對不同DBMS的共享。數(shù)據(jù)庫操作的“數(shù)據(jù)源”對應用程序是透明的,所有的數(shù)據(jù)庫操作由對應DBMS的ODBC驅動程序(ODBC Driver)完成。有了ODBC驅動程序,數(shù)據(jù)源就變得十分廣泛,它可以是本機的某種數(shù)據(jù)庫格式的文件(如本機DOS目錄下的Access文
件*.mdb),也可以是遠程數(shù)據(jù)庫文件(如Microsoft SQL Server);它可以是目前已知的某種DBMS格式,也可以是一種全新的數(shù)據(jù)庫格式?傊,它取決于提供了什么數(shù)據(jù)庫類型的驅動程序。
Visual C 中的ODBC主要是實現(xiàn)基于Windows的關系數(shù)據(jù)庫的應用的共享。
二、ODBC管理器
在ODBC中,數(shù)據(jù)源是一個重要的概念,它是數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等連接信息的總和。數(shù)據(jù)源在使用前必須通過ODBC管理器(Administrator)進行登錄。在登錄數(shù)據(jù)源時,要搞清數(shù)據(jù)源名(Datasource name)、數(shù)據(jù)庫文件名(Database name)和數(shù)據(jù)表格名(Table name)這三者的概念和相互關系:數(shù)據(jù)源實際是一種數(shù)據(jù)連接的抽象,數(shù)據(jù)源名是登錄時賦予的“連接”的名稱,以供應用程序使用,至于該數(shù)據(jù)源下連接的是哪一個數(shù)據(jù)庫,則由數(shù)據(jù)庫文件名指出(如Access 2.0 for MS Offics中的.mdb文件);一個數(shù)據(jù)庫文件中可以包括若干個數(shù)據(jù)表格(table)和其他內容。在關系@@09A05900.GIF;圖1 ODBC層次關系圖數(shù)據(jù)庫中,數(shù)據(jù)是以二維表格的方式存在于數(shù)據(jù)庫@@文件中,應用程序最終的操作目標即是這些表格中的行(row記錄)和列(columns字段)數(shù)據(jù)。對于foxprow數(shù)據(jù)源,數(shù)據(jù)庫文件名是“路徑名”,而該路徑下的所有數(shù)據(jù)文件(*.dbf)都屬于該“數(shù)據(jù)庫文件”名下的數(shù)據(jù)表格(table)。
ODBC管理器被裝在Control Panel里(ODBCINST.CPL)。通過該工具可以增添、修改或刪除數(shù)據(jù)源,也用來增添、刪除ODBC驅動程序,ODBC管理器把數(shù)據(jù)源和它們的連接信息保存在ODBC.INI、ODBCINST.INI和ODBCISAM.INI中。當需要共享應用程序時,只需按新的數(shù)據(jù)文件的類型和位置重新登錄即可。
三、ODBC應用程序接口
ODBC API是一組標準的ODBC函數(shù)庫,除了一般的數(shù)據(jù)庫操作函數(shù)外,還包括一組函數(shù)(如SQLExec或SQLExecdirect)能夠內嵌標準SQL查詢語句。SQL(Structured Query Language結構化查詢語言)是一種存取關系型數(shù)據(jù)庫的標準語言,能夠定義、查詢、修改和控制數(shù)據(jù),簡單的語句能夠作用于整個數(shù)據(jù)表格,具有很強的功能。
同Windows 3.1 SDK中API類似,ODBC API也是基于句柄(handle)進行操作的。API函數(shù)按功能可
[1] [2] [3] [4]