隨著資料庫技術的廣泛套用,開發各種資料庫應用程式已成為計算機套用的一個重要方面。VB具有強大的資料庫操作功能,提供了數據管理器(Data Manager)、數據控制項(DataControl)和ADO(Active Data Object)數據對象等工具,使編程人員可以輕鬆地開發出各種資料庫應用程式。當前各種主流資料庫有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。資料庫編程是對資料庫的創建、讀寫等一列的操作。資料庫編程分為資料庫客戶端編程與資料庫伺服器端編程。資料庫客戶端編程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;資料庫服務端編程主要使用OLE DB等方法。資料庫編程需要掌握一些訪問資料庫技術方法,還需要注意怎么設計高效的資料庫、資料庫管理與運行的最佳化、資料庫語句的最佳化。
基本介紹
- 中文名:資料庫編程
- 外文名:Database Programming
- 套用領域:資料庫、計算機等
- 主流資料庫:Oracle, MS SQL Server等
- 客戶端編程:ODBC API、ADO等
- 資料庫類型:網狀資料庫層次資料庫關係資料庫
資料庫的基本概念
訪問資料庫技術方法
VC資料庫編程幾種方法
ODBC連線
ODBC(Open DataBase Connectivity)是MSOA的一部分,是一個標準資料庫接口。它提供對關係資料庫訪問的統一接口,實現對異構數據源的一致訪問。
<1>句柄(Handles):ODBC使用句柄來標識ODBC環境、連線、語句和描述器.
<2>快取區(Buffers):
<3>數據類型(Data types)
<4>一致性級別(Conformance levels)
用ODBC設計客戶端的一般步驟:
<1>分配ODBC環境
<2>分配連線句柄
<3>連線數據源
<4>構造和執行SQL語句
<5>獲得查詢結果
<6>斷開數據源的連線
<7>釋放ODBC環境
ODBC API是一種適合資料庫底層開發的編程方法,ODBC API提供大量對數據源的操作,ODBC API能夠靈活地操作游標,支持各種幫定選項,在所有ODBC相關編程中,API編程具有最高的執行速度.因此,ODBC API編程屬於底層編程。
MFC ODBC連線
MFC ODBC是MFC對ODBC進行的封裝,以簡化對ODBC API的 調用,從而實現面向對象的資料庫編程接口.
MFC ODBC的封裝主要開發了CDatabase類和CRecordSet類
(1) CDatabase類
CDatabase類用於應用程式建立同數據源的連線。CDatabase類中包含一個m_hdbc變數,它代表了數據源的連線句柄。如果要建立CDatabase類的實例,應先調用該類的構造函式,再調用Open函式,通過調用,初始化環境變數,並執行與數據源的連線。在通過Close函式關閉數據源。
CDatabase類提供了對資料庫進行操作的函式及事務操作。
(2) CRecordSet類
CRecordSet類定義了從資料庫接收或者傳送數據到資料庫的成員變數,以實現對數據集的數據操作。
CRecordSet類的成員變數m_hstmt代表了定義該記錄集的SQL語句句柄,m_nFields為記錄集中欄位的個數,m_nParams為記錄集所使用的參數個數。
CRecordSet的記錄集通過CDatabase實例的指針實現同數據源的連線,即CRecordSet的成員變數m_pDatabase.
MFC ODBC編程更適合於界面型資料庫應用程式的開發,但由於CDatabase類和CRecordSet類提供的資料庫操作函式有限,支持的游標類型也有限,限制了高效的資料庫開發。在編程層次上屬於高級編程。
DAO連線
DAO(Data Access Object)是一組Microsoft Access/Jet資料庫引擎的COM自動化接口.DAO直接與Access/Jet資料庫通信.通過Jet資料庫引擎,DAO也可以同其他資料庫進行通信。DAO還封裝了Access資料庫的結構單元,通過DAO可以直接修改Access資料庫的結構,而不必使用SQL的數據定義語言(DDL)。
DAO的體系結構如下:
(1)CdaoWorkspace:對DAO工作區(資料庫處理事務管理器)的封裝
(2)CdaoDatabase:對DAO資料庫對象的封裝,負責資料庫連線.
(3)CdaoRecordset:對DAO記錄集對象的封裝,代表所選的一組記錄.
(4)CdaoTableDef:對表定義對象的封裝,代表基本表或附加表定義.
(5)CdaoQueryDef:對查詢對象的封裝,包含所有查詢的定義.
(6)CdaoException:DAO用於接收資料庫操作異常的類.
(7)CDaoFieldExchange
DAO提供了很好的資料庫編程的對象模型.但是,對資料庫的所有調用以及輸出的數據都必須通過Access/Jet資料庫引擎,這對於使用資料庫應用程式,是嚴重的瓶頸。
DAO相對於ODBC來說,屬於高層的資料庫接口.
OLE DB連線
OLE DB對ODBC進行了兩方面的擴展:一是提供了資料庫編程的OLE接口即COM,二是提供了一個可用於關係型和非關係型數據源的接口。
OLE DB提供了COM接口,與傳統的資料庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關係數據源進行通信。
與ODBC API一樣,OLE DB也屬於底層的資料庫編程接口,OLE DB結合了ODBC對關係資料庫的操作功能,並進行擴展,可以訪問非關係資料庫。
OLE DB訪問資料庫的原理如下:
OLE DB程式結構:
OLE DB由客戶(Consumer)和伺服器(Provider)。客戶是使用數據的應用程式,它通過OLE DB接口對數據提供者的數據進行訪問和控制。OLE DB伺服器是提供OLE DB接口的軟體組件。根據提供的內容可以分為數據提供程式(Data Provider)和服務提供程式(Service Provider)。
程式結構原理圖如下:
<1> 數據提供程式
數據提供程式擁有自己的數據並把數據以表格的形式呈現給使用者使用.
<2> 服務提供程式
服務提供程式是數據提供程式和使用者的結合。它是OLE DB體系結構中的中間件,它是OLE DB數據源的使用者和數據使用程式的提供者
<3> 數據使用程式
數據使用程式對存儲在數據提供程式中的數據進行使用和控制.
OLE DB開發程式的一般步驟:
<1> 初始化COM環境
<2> 連線數據源
<3> 打開對話
<4> 執行命令
<5> 處理結果
<6> 清除對象
OLE DB Templates連線
使用OLE DB接口編程屬於最低可能層,代碼冗長並且很難維護。因此MS Visual Studio對OLE DB進一步抽象和封裝,提供COM OLE DB Templates這個可行的中間層,從而簡化了OLE DB應用程式的編寫。
OLE DB Templates編寫客戶資料庫程式方法:
<1>以MFC AppWizard為嚮導建立應用程式框架,添加OLE DB支持的頭檔案,然後使用OLE DB類進行資料庫套用開發。
<2>以ATL COM AppWizard為嚮導建立應用程式框架,該框架直接支持OLE DB模板類。
OLE DB Templates包括:Consumer Templates和Provider Templates。
(1) Consumer Templates使用者模板
使用者模板(Consumer Templates)體系結構:
(2) Provider Templates伺服器模板
伺服器模板類體系結構:
ADO連線
ADO對象模型包括以下關鍵對象:
<1>Connection對象:在資料庫套用里運算元據源都通過該對象,這是數據交換的環境,代表與數據源的一個會話。
<2>Command對象:是一個對數據源執行命令的定義。
<3>Parameter對象:用於制定參數化查詢或者存儲過程的參數。
<4>Recordset對象:是執行結果集存儲到本地的ADO對象。
<5>Field對象:ADO中對列進行操作的對象。
<6>Error對象:對ADO數據操作時發生錯誤的詳細描述。
<7>Property對象:代表一個由提供者定義的ADO對象的動態特徵。
ADO對象編程模型:
Parameters
Collection
Execute
Source
Error Collection
(Optional) Active Fields
Connection Collection
(3)ADO編程一般步驟:
<1>創建一個Connection對象。
<2>打開數據源,建立同數據源的連線。
<3>執行一個SQL命令。
<4>使用結果集。
<5>終止連線。
(4)ADO的資料庫訪問規範
引入ADO支持
#import Program Files/Common Files/System/ado/msado*.dll
初始化和釋放ADO環境:
CoInitialize(NULL);
CoUninitialize();