數據庫編程總結
當前各種主流數據庫有很多,包括, MS SQL , , ,MySQL, DB2, / , , , SAP/DB, , MS 等等。數據庫編程是對數據庫的創建、讀寫等一列的操作。數據庫編程分為數據庫客戶端編程與數據庫服務器端編程。數據庫客戶端編程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;數據庫服務端編程主要使用OLE DB等方法。數據庫編程需要掌握一些訪問數據庫技術方法,還需要注意怎么設計高效的數據庫、數據庫管理與運行的優化、數據庫語句的優化。
一、訪問數據庫技術方法
數據庫編程分為數據庫客戶端編程與數據庫服務器端編程。數據庫客戶端編程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;數據庫服務端編程主要使用OLE DB等方法。
1、幾種是數據庫訪問方法比較
是一種適合數據庫底層開發的編程方法,提供大量對數據源的操作,能夠靈活地操作游標,支持各種幫定選項,在所有ODBC相關編程中,API編程具有最高的執行速度。
DAO提供了很好的數據庫編程的對象模型.但是,對數據庫的所有調用以及輸出的數據都必須通過/Jet數據庫引擎,這對于使用數據庫應用程序,是嚴重的瓶頸。
OLEDB提供了COM接口主流數據庫有哪些,與傳統的數據庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關系數據源進行通信。
ADO最主要的優點在于易于使用、速度快、內存支出少和磁盤遺跡小。
ADO.NET 是利用數據集的概念將數據庫數據讀入內存中,然后在內存中對數據進行操作,最后將數據集數據回寫到源數據庫中。
OTL 是 , Odbc and DB2-CLI 的縮寫,是一個C++編譯中操控關系數據庫的模板庫, OTL中直接操作主要是通過提供的OCI接口進行,進行操作DB2數據庫則是通過CLI接口來進行,至于MS的數據庫和其它一些數據庫,則OTL只提供了ODBC來操作的方式。當然和DB2也可以由OTL間接使用ODBC的方式來進行操縱。具有以下優點:跨平臺;運行效率高,與C語言直接調用API相當;開發效率高,起碼比使用起來更簡單,更簡潔;部署容易,不需要ADO組件,不需要.net 等。
2、VC數據庫編程幾種方法
VC數據庫編程幾種方法,包括ODBC連接、MFC ODBC連接、DAO連接、OLEDB、OLE DB 連接、ADO、專用方法(OCI()訪問、++ )。
通用方法
1. ODBC連接
ODBC(Open )是MSOA的一部分,是一個標準數據庫接口。它提供對關系數據庫訪問的統一接口,實現對異構數據源的一致訪問。
ODBC數據訪問由以下部分組成:
句柄():ODBC使用句柄來標識ODBC環境、連接、語句和描述器.
緩存區():
數據類型(Data types)
一致性級別( )
用ODBC設計客戶端的一般步驟:
分配ODBC環境
分配連接句柄
連接數據源
構造和執行SQL語句
獲得查詢結果
斷開數據源的連接
釋放ODBC環境
ODBC API是一種適合數據庫底層開發的編程方法,ODBC API提供大量對數據源的操作,ODBC API能夠靈活地操作游標,支持各種幫定選項,在所有ODBC相關編程中,API編程具有最高的執行速度.因此,ODBC API編程屬于底層編程。
2. MFC ODBC連接
MFC ODBC是MFC對ODBC進行的封裝,以簡化對ODBC API的 調用,從而實現面向對象的數據庫編程接口.
MFC ODBC的封裝主要開發了類和類
(1) 類
類用于應用程序建立同數據源的連接。類中包含一個變量,它代表了數據源的連接句柄。如果要建立類的實例,應先調用該類的構造函數,再調用Open函數,通過調用,初始化環境變量,并執行與數據源的連接。在通過Close函數關閉數據源。
類提供了對數據庫進行操作的函數及事務操作。
(2) 類
類定義了從數據庫接收或者發送數據到數據庫的成員變量,以實現對數據集的數據操作。
類的成員變量代表了定義該記錄集的SQL語句句柄,為記錄集中字段的個數,為記錄集所使用的參數個數。
的記錄集通過實例的指針實現同數據源的連接,即的成員變量.
MFC ODBC編程更適合于界面型數據庫應用程序的開發,但由于類和類提供的數據庫操作函數有限,支持的游標類型也有限,限制了高效的數據庫開發。在編程層次上屬于高級編程。
應用實例:
1.打開數據庫
;
.( _T( "DSN=" ),::);//為數據源名稱
2.關聯記錄集
(&);
3.查詢記錄
sSql1="";
sSql1 = " * FROM " ;
.Open(::, sSql1, ::);
int ti=0;
var;//var可以轉換為其他類型的值
while (!.IsEOF())
{
//讀取Excel內部數值
.("id",var);
[ti].id=var.;
.("name", [ti].name);
ti++;
.();
}
.Close();//關閉記錄集
4.執行sql語句
sSql="";
sSql+=" * from 院系審核";//清空表
.(sSql);
sSql也可以為 ,等語句
5.讀取字段名
sSql = " * FROM " ; //讀取的文件有表的定義,或為本程序生成的表.
// 執行查詢語句
.Open(::, sSql, ::);
int =.();//列數
[30];
//得到記錄集的字段集合中的字段的總個數
for( i=0;i {
;
.(i,);
[i].name =.;//字段名
}
6.打開excel文件
= " EXCEL (*.XLS)"; // Excel安裝驅動
sSql,; //為excel的文件路徑
TRY
{
// 創建進行存取的字符串
sSql.("={%s};DSN='';=1;=FALSE;=/"%s/";DBQ=%s",, , );
// 創建數據庫 (既Excel表格文件)
if( .(sSql,::) )
{
//可以把excel作為一個數據庫操作
}
}
catch(e)
{
("Excel驅動沒有安裝: %s",);
("讀取失敗,請檢查是否定義數據區");
}
3. DAO連接
DAO(Data )是一組 /Jet數據庫引擎的COM自動化接口.DAO直接與/Jet數據庫通信.通過Jet數據庫引擎,DAO也可以同其他數據庫進行通信。DAO還封裝了數據庫的結構單元,通過DAO可以直接修改數據庫的結構,而不必使用SQL的數據定義語言(DDL)。
DAO的體系結構如下:
DAO封裝的類:
(1):對DAO工作區(數據庫處理事務管理器)的封裝
(2):對DAO數據庫對象的封裝,負責數據庫連接.
(3):對DAO記錄集對象的封裝,代表所選的一組記錄.
(4):對表定義對象的封裝,代表基本表或附加表定義.
(5):對查詢對象的封裝,包含所有查詢的定義.
(6):DAO用于接收數據庫操作異常的類.
(7)
DAO提供了很好的數據庫編程的對象模型.但是,對數據庫的所有調用以及輸出的數據都必須通過/Jet數據庫引擎,這對于使用數據庫應用程序,是嚴重的瓶頸。
DAO相對于ODBC來說,屬于高層的數據庫接口.
4. OLE DB連接
OLE DB對ODBC進行了兩方面的擴展:一是提供了數據庫編程的OLE接口即COM,二是提供了一個可用于關系型和非關系型數據源的接口。
OLE DB提供了COM接口,與傳統的數據庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關系數據源進行通信。
與ODBC API一樣,OLE DB也屬于底層的數據庫編程接口,OLE DB結合了ODBC對關系數據庫的操作功能,并進行擴展,可以訪問非關系數據庫。
OLE DB訪問數據庫的原理如下:
OLE DB程序結構:
OLE DB由客戶()和服務器()??蛻羰鞘褂脭祿膽贸绦颍ㄟ^OLE DB接口對數據提供者的數據進行訪問和控制。OLE DB服務器是提供OLE DB接口的軟件組件。根據提供的內容可以分為數據提供程序(Data )和服務提供程序( )。
程序結構原理圖如下:
數據提供程序
數據提供程序擁有自己的數據并把數據以表格的形式呈現給使用者使用.
服務提供程序
服務提供程序是數據提供程序和使用者的結合。它是OLE DB體系結構中的中間件,它是OLE DB數據源的使用者和數據使用程序的提供者
數據使用程序
數據使用程序對存儲在數據提供程序中的數據進行使用和控制.
OLE DB開發程序的一般步驟:
初始化COM環境
連接數據源
打開對話
執行命令
處理結果
清除對象
應用實例:
使用OLEDB編寫數據庫應用程序
1概述
OLE DB的存在為用戶提供了一種統一的方法來訪問所有不同種類的數據源。OLE DB可以在不同的數據源中進行轉換。利用OLE DB,客戶端的開發人員在進行數據訪問時只需把精力集中在很少的一些細節上,而不必弄懂大量不同數據庫的訪問協議。
OLE DB是一套通過COM接口訪問數據的接口。這個OLE DB接口相當通用,足以提供一種訪問數據的統一手段,而不管存儲數據所使用的方法如何。同時,OLE DB還允許開發人員繼續利用基礎數據庫技術的優點,而不必為了利用這些優點而把數據移出來。
2使用ATL使用OLE DB數據使用程序
由于直接使用OLE DB的對象和接口設計數據庫應用程序需要書寫大量的代碼。為了簡化程序設計, C++提供了ATL模板用于設計OLE DB數據應用程序和數據提供程序。
利用ATL模板可以很容易地將OLE DB與MFC結合起來,使數據庫的參數查詢等復雜的編程得到簡化。MFC提供的數據庫類使OLE DB的編程更具有面向對象的特性。Viual C++所提供用于OLE DB的ATL模板可分為數據提供程序的模板和數據使用程序的模板。
使用ATL模板創建數據應用程序一般有以下幾步驟:
1)、 創建應用框架
2)、 加入ATL產生的模板類
3)、 在應用中使用產生的數據訪問對象
3 不用ATL使用OLE DB數據使用程序
利用ATL模板產生數據使用程序較為簡單,但適用性不廣,不能動態適應數據庫的變化。下面我們介紹直接使用MFC OLE DB類來生成數據使用程序。
模板的使用
OLE DB數據使用者模板是由一些模板組成的,包括如下一些模板,下面對一些常用類作一些介紹。
1)、 會話類
類
類與OLE DB的數據源對象相對應。這個類代表了OLE DB數據提供程序和數據源之間的連接。只有當數據源的連接被建立之后,才能產生會話對象,可以調用Open來打開數據源的連接。
類
所創建的對象代表了一個單獨的數據庫訪問的會話。一個用類產生的數據源對象可以創建一個或者多個會話,要在數據源對象上產生一個會話對象,需要調用函數Open()來打開。同時,會話對象還可用于創建事務操作。
類
類是用來訪問枚舉器查詢后所產生的行集中可用數據提供程序的信息的訪問器,可提供當前可用的數據提供程序和可見的訪問器。
2)、 訪問器類
類
類代表與訪問器的類型。當用戶知道數據庫的類型和結構時,可以使用此類。它支持對一個行集采用多個訪問器,并且,存放數據的緩沖區是由用戶分配的。
類
類用來在程序運行時動態的創建訪問器。當系統運行時,可以動態地從行集中獲得列的信息,可根據此信息動態地創建訪問器。
類
類中以在程序運行時將列與變量綁定或者是將參數與變量捆定。
3)、 行集類
類
類封裝了行集對象和相應的接口,并且提供了一些方法用于查詢、設置數據等??梢杂肕ove()等函數進行記錄移動,用()函數讀取數據,用()、()、()來更新數據。
類
類用于在一次調用中取回多個行句柄或者對多個行進行操作。
類
類提供用數組下標進行數據訪問。
4)、 命令類
類
類用于對數據庫的簡單訪問,用數據源的名稱得到行集,從而得到數據。
類
類用于支持命令的數據源??梢杂肙pen()函數來執行SQL命令,也可以()函數先對命令進行準備主流數據庫有哪些,對于支持命令的數據源,可以提高程序的靈活性和健壯性。
在.h頭文件里,加入如下代碼。
#
;
#
#
# // if you are using
在.cpp文件里,加入如下代碼。
#
;
決定使用何種類型的存取程序和行集。
獲取數據
在打開數據源,會話,行集對象后就可以獲取數據了。所獲取的數據類型取決于所用的存取程序,可能需要綁定列。按以下步驟。
1、 用正確的命令打開行集對象。
2、 如果使用,在使用之前與相應列進行綁定。要綁定列,可以用函數,如下所示:
// Get the
ULONG = 0;
* = NULL;
= NULL;
if (rs.(&, &, &) != S_OK)
on(rs., );
* pBind = new [];
rs.(, &pBind[0], ()*);
for (ULONG l=0; l