999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

VC++訪問數(shù)據(jù)庫的方法研究

2009-04-29 00:00:00趙美利
電腦知識(shí)與技術(shù) 2009年5期

摘要:用VC++開發(fā)一個(gè)管理系統(tǒng),要使用數(shù)據(jù)庫對(duì)所需的數(shù)據(jù)進(jìn)行存儲(chǔ)與管理。該文介紹了Visual C++訪問開發(fā)數(shù)據(jù)庫的幾種技術(shù)概況及其訪問的方法:ODBC,DAO,OLE/DB和ADO,并對(duì)各種技術(shù)的使用范圍、訪問效率、工作穩(wěn)定性等進(jìn)行了比較,并給出了基本使用方法。

關(guān)鍵詞:ODBC;DAO;OLE/DB;ADO

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)05-1051-02

VC++ to Access the Database of the Method

ZHAO Mei-li1,TANG Jing2

(1.Naval Academy Computer Department of Bengbu,Bengbu 233000,China;2.Fengyang Normal school,F(xiàn)engyang 233100,China)

Abstract: Develops a management system management system with VC++ must use the database to carry on the memory and the management the data which needs. This paper introduces the Visual C + + to access the database of profiles and their visit to several technical approaches: ODBC, DAO, OLE/DB and ADO,and the use of various technologies, access efficiency, job stability, etc. were compared, and gives the basic use.

Key words:ODBC; DAO; OLE/DB; ADO

1 引言

隨著Visual C++軟件開發(fā)工具的廣泛推廣記載數(shù)據(jù)庫方面的應(yīng)用日趨廣泛和深入,越來越多的軟件開發(fā)人員和愛好者希望理解并掌握應(yīng)用Visual C++管理開發(fā)數(shù)據(jù)庫的技術(shù)和方法。VC++提供了幾種接口(ODBC、DAO、OLE/DB、ADO)來支持?jǐn)?shù)據(jù)庫編程,利用這些接口可以在程序中直接操作各種各樣的數(shù)據(jù)庫,如(SQL Server、Microsoft Access、Microsoft FoxPro等等。

2 ODBC

ODBC(Open Database Connection 開放數(shù)據(jù)庫互連)是一種使用SQL的數(shù)據(jù)庫應(yīng)用程序設(shè)計(jì)接口。它建立了一組規(guī)范,并提供了一組對(duì)數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口),為ODBC編程提供了一個(gè)面向?qū)ο蟮姆椒ǎ@使得利用MFC來創(chuàng)建ODBC的應(yīng)用程序非常方便。在使用ODBC API時(shí),用戶須引入的頭文件“sql.h”,”sqlext.h”,”sqhypes.h”。MFC對(duì)ODBC的封裝主要是開發(fā)了Cdatabase類和CRecordSet類[1]。

Cdatabase類:該類可以實(shí)現(xiàn)對(duì)數(shù)據(jù)源的操作。通過構(gòu)造Cdatabase類對(duì)象,調(diào)用它的Open或者OpenEx成員函數(shù)建立數(shù)據(jù)源連接。CRecordSet類:記錄集類提供從數(shù)據(jù)源中提取的結(jié)果記錄集并對(duì)其進(jìn)行操作。它通過SQL語句返回,可以對(duì)表和視圖進(jìn)行查詢或存儲(chǔ)。要注意的是在應(yīng)用程序中,一般不直接使用CRecordSet類而是使用其派生類,因?yàn)楫?dāng)使用MFC Class Wizard 產(chǎn)生一個(gè)CRecordSet類的派生類時(shí)MFC Class Wizard會(huì)自動(dòng)添加相應(yīng)數(shù)據(jù)庫表中字段的成員變量并自動(dòng)重載CRecordSet類的成員函數(shù)DoFieldExchange()。通過使用RFX函數(shù)來完成數(shù)據(jù)庫字段與記錄集字段數(shù)據(jù)成員變量的數(shù)據(jù)交換。在程序中使用MFC ODBC,除登錄數(shù)據(jù)源之外,還需要在stdafx.h中包含afxdb.h。

3 DAO

ODBC的優(yōu)點(diǎn)是它的使用比較簡(jiǎn)單,只要登錄Windows控制面板中的數(shù)據(jù)源,就可以使ODBC連接到相應(yīng)的數(shù)據(jù)庫。但是使用ODBC訪問數(shù)據(jù)庫速度較慢,同時(shí)ODBC德爾使用需要很多相應(yīng)的部件支持。DAO克服了ODBC的一些缺陷,由于它實(shí)際上使通過Microsoft Jet數(shù)據(jù)庫引擎來訪問數(shù)據(jù)庫,所以DAO方法非常適合訪問Jet型數(shù)據(jù)庫(.mdb),同時(shí)使用DAO方法不需要登錄數(shù)據(jù)源,只要指明數(shù)據(jù)庫的路徑即可。

VC++的ODBC和DAO方法在使用形式上比較相似, ODBC訪問記錄集的基類是CRecordSet,DAO則為CdaoRecordSet,差別就是加上“DAO”,通過定義這些類的對(duì)象并調(diào)用相應(yīng)的成員函數(shù)就可以實(shí)現(xiàn)Access數(shù)據(jù)庫和表的動(dòng)態(tài)創(chuàng)建。ODBC存取數(shù)據(jù)庫時(shí)使用RFX_LongBinary。使用AppWizard的過程基本上與使用ODBC時(shí)相似,只是在選擇數(shù)據(jù)源時(shí)要選擇已建立好的DAO數(shù)據(jù)源,在后從系統(tǒng)中選出源數(shù)據(jù)庫和表,令其自動(dòng)生成這部分的代碼。在應(yīng)用程序中使用MFC DAO可以通過以下步驟來實(shí)現(xiàn):

首先應(yīng)確保在stdafx.h頭文件中包含了afxdao.h頭文件:

#include“afxdao.h”

接著創(chuàng)建自己的CdaoRecordSet類(設(shè)為MydaoRecordSet),并使它與你所需要的數(shù)據(jù)庫的表相連。同時(shí)在文檔類的OnOpenDocument()函數(shù)中加入

m_pdb=newCDaodatabase

m_pdb->open();

m_pset= newMydaoRecordSet(m_pdb);

m_pset->open();

最后創(chuàng)建自己的對(duì)話框,選擇ClassWizard的ClassInfo頁。在ForeignClass項(xiàng)填入先前所創(chuàng)建的MydaoRecordSet,在ForeignVariable項(xiàng)填入m_pset,并對(duì)各個(gè)edit欄用變量映射。

4 OLE/DB

DAO也存在較大的缺點(diǎn):主要是MFC DAO與Jet數(shù)據(jù)庫引擎之間的版本。由于Visual C++.NET環(huán)境和向?qū)Р辉僦С諨AO(雖然仍包括DAO類),用戶必須手工編寫過去由向?qū)?zhí)行的任務(wù),Microsoft建議新項(xiàng)目采用OLE/DB模板或ODBC。OLE DB是基于COM借口的訪問數(shù)據(jù)庫的新技術(shù)[2],所以它繼承了COM接口所有特性,具有較好的穩(wěn)定性,由于接口的標(biāo)準(zhǔn)性,使得程序可以被應(yīng)用到任何提供了數(shù)據(jù)程序的數(shù)據(jù)源,因此使用OLE DB開發(fā)的程序具有比較好的移植性。另外OLE DB通過將數(shù)據(jù)庫的功能分為客戶和服務(wù)器兩個(gè)方面,提高了數(shù)據(jù)庫訪問效率。前面提到的傳統(tǒng)數(shù)據(jù)庫訪問技術(shù)(ODBC、DAO)都只能訪問關(guān)系型數(shù)據(jù)庫,而OLE DB可以訪問任何形式的文件系統(tǒng),包括傳統(tǒng)的關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)源及用戶自定義的文件格式。但是在基于COM技術(shù)的數(shù)據(jù)庫訪問中通常使用ADO技術(shù)而不是OLE/DB。

5 ADO

ADO對(duì)象模型包括了7個(gè)對(duì)象:1)數(shù)據(jù)連接(Connection)對(duì)象建立一個(gè)數(shù)據(jù)交換環(huán)境,應(yīng)用程序通過Connection訪問數(shù)據(jù);2)命令(Command)對(duì)象通過已建立的Connection發(fā)布命令完成操作數(shù)據(jù)庫功能;3)記錄集(RecordSet)對(duì)象存儲(chǔ)查詢命令返回的結(jié)果;4)錯(cuò)(Error)對(duì)象時(shí)記錄應(yīng)用ADO過程中出現(xiàn)錯(cuò)誤的信息;5)屬性(Property)對(duì)象代表數(shù)據(jù)提供者的具體屬性;6)字段(Field)對(duì)象代表一個(gè)記錄集的一個(gè)域;7)參數(shù)(Parameter)對(duì)象代表SQL存儲(chǔ)過程或有參數(shù)查詢中的參數(shù)。其中Connection、Command和RecordSet三個(gè)對(duì)象是主體對(duì)象,它們可以被獨(dú)立創(chuàng)建和釋放。Connection對(duì)象是用來建立和維護(hù)與數(shù)據(jù)源的連接,對(duì)數(shù)據(jù)創(chuàng)建和執(zhí)行對(duì)數(shù)據(jù)庫的操作命令,可以使用該對(duì)象執(zhí)行SQL語句或調(diào)用存儲(chǔ)過程;Command對(duì)象執(zhí)行后將返回一個(gè)RecordSet對(duì)象。RecordSet對(duì)象包含執(zhí)行數(shù)據(jù)庫操作后返回的一個(gè)記錄集。通過該對(duì)象可以瀏覽和更新數(shù)據(jù)庫中保存的記錄[3]。

4.1 ADO對(duì)象與數(shù)據(jù)源的連接

ADO是基于COM技術(shù)的,因此在使用ADO對(duì)象之前必須初始化COM環(huán)境,在VC工程應(yīng)用類Initinstance的成員函數(shù)中添加如下初始化COM環(huán)境的代碼:

::Coinitialize(NULL);

1) 在MFC中沒有可與ADO一起使用的類,因此若要在Visual C++程序中使用ADO對(duì)象,首先需要導(dǎo)入ADO動(dòng)態(tài)鏈接庫,在創(chuàng)建的VC工程的stadafx.h頭文件中添加如下代碼[4]:

#import“C:\\Program Files\\Common Files\\System\\ado\\msadol5.DLL\o_namespace”

Rename(“EOF”,“EndOfFile”);

其中no_namespace屬性表示編譯器不繼承本身的命名空間,rename(“EOF”,”EndOfFile)表示將所有“EOF”替換為“EndOfFile”。為了方便使用ADO的各個(gè)類,應(yīng)該在程序開頭調(diào)用#import指令,在ADO的類庫中包含了3個(gè)智能指針ConnectionPtr、CommandPtr和RecordSetPtr,其中ConnectionPtr指針用來管理連接一個(gè)數(shù)據(jù)源提供者所要求的信息,它提供了很多方法如Open和Close可以打開和關(guān)閉一個(gè)到數(shù)據(jù)庫提供者的活動(dòng)連接(Live Connection),還可以通過Excute方法在數(shù)據(jù)源上執(zhí)行命令,而RecordSetPtr封裝了數(shù)據(jù)源提供者返回的記錄,它可以用于瀏覽返回的結(jié)果,也可以用于插入、刪除或修改以有記錄。為了代碼的安全性,必須在函數(shù)調(diào)用的地方添加“try…catch…”程序塊:

Try

{

m_pRs=m_pConn->Excute(a_pStoredProcString,NULL,adCmdStored Proc);

Return m_pRs;

}

Catch(_corn_errora_pComError)

{

TraceCOMExceptions(a_pComError);

Return NULL;

}

2) 使用Connection對(duì)象和數(shù)據(jù)庫建立連接

3) 利用建立好的連接(Connection)對(duì)象,通過Command對(duì)象執(zhí)行SQL命令,如果是從數(shù)據(jù)庫中讀出數(shù)據(jù),則將提取出的數(shù)據(jù)放入記錄集RecordSet對(duì)象。

4) 使用完畢后斷開和數(shù)據(jù)庫的連接,釋放對(duì)象。需要調(diào)用以下代碼釋放程序占用的COM資源。在VC工程應(yīng)用累的ExitInstance成員函數(shù)添加如下代碼,將初始化的對(duì)象釋放,清除為ADO對(duì)象準(zhǔn)備的COM環(huán)境

::Couninitialize

6 結(jié)束語

在VC++中包含了開發(fā)數(shù)據(jù)庫的全方位的支持,通過它所提供的訪問計(jì)數(shù)程序開發(fā)人員就可以訪問各種數(shù)據(jù)庫。本文概括了VC訪問數(shù)據(jù)庫的幾種技術(shù)特點(diǎn)及操作步驟。使程序開發(fā)人員和愛好者全面了解各種訪問技術(shù)特性,選擇適合自己的開發(fā)技術(shù)。

參考文獻(xiàn):

[1] 梁小亮,宋祖勛. Vc++6.0訪問Oracle數(shù)據(jù)庫技術(shù).微型電腦應(yīng)用 2008(24,6):63-65.

[2] 王櫻,徐雨明. Vc++中數(shù)據(jù)庫訪問技術(shù)研究.為計(jì)算機(jī)信息 2006(22,43):256-258.

[3] 譚鋒,蔡豐.基于ADO技術(shù)動(dòng)態(tài)創(chuàng)建SQL Server數(shù)據(jù)庫.計(jì)算機(jī)時(shí)代 2007(3):60-62.

[4] 王長(zhǎng)江,屈紅剛,閔小剛.利用ADO實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入導(dǎo)出的關(guān)鍵技術(shù).重慶科技學(xué)院學(xué)報(bào)(自然科學(xué)版)2006.06(8,2):70-74.

主站蜘蛛池模板: 国产一区二区免费播放| 国产麻豆精品在线观看| 成年A级毛片| 波多野结衣无码视频在线观看| 国产主播在线一区| 一本久道久综合久久鬼色| 老司国产精品视频91| 喷潮白浆直流在线播放| 久久精品丝袜| 99re免费视频| 亚瑟天堂久久一区二区影院| 国产精品三区四区| 丰满人妻中出白浆| 精品午夜国产福利观看| 69国产精品视频免费| 国产精品网址在线观看你懂的| 婷婷色在线视频| 亚洲精品片911| 老司机久久99久久精品播放| 欧美另类第一页| 99re在线视频观看| 一区二区三区成人| 中文字幕资源站| 午夜老司机永久免费看片| 日韩成人在线网站| 国产精品美女网站| 找国产毛片看| 国产91精品调教在线播放| 国产福利免费在线观看| 亚洲欧美日韩综合二区三区| 亚洲区第一页| 久久夜夜视频| 日本爱爱精品一区二区| 99这里只有精品在线| 2048国产精品原创综合在线| 精品久久久久久中文字幕女| 国产在线精品人成导航| 亚洲国产一成久久精品国产成人综合| 中文字幕2区| 午夜国产大片免费观看| 日韩福利视频导航| 亚洲一区网站| 白丝美女办公室高潮喷水视频| 欧美亚洲另类在线观看| 久久一日本道色综合久久| 久久久久久久久18禁秘| 亚欧美国产综合| 人人91人人澡人人妻人人爽 | 国产精品白浆在线播放| 亚洲日本在线免费观看| 又黄又湿又爽的视频| 亚洲国产精品日韩欧美一区| 国内精品自在自线视频香蕉| 精品无码一区二区三区电影| 国产精品lululu在线观看| 91精品人妻互换| 中日韩一区二区三区中文免费视频| 一级一级特黄女人精品毛片| 久久国产毛片| 狠狠躁天天躁夜夜躁婷婷| 青青操国产视频| 婷婷中文在线| 高清不卡毛片| 中文无码毛片又爽又刺激| 青青青伊人色综合久久| 51国产偷自视频区视频手机观看| 亚洲人精品亚洲人成在线| 一级毛片中文字幕| 亚洲国产欧美国产综合久久| 性激烈欧美三级在线播放| 波多野结衣中文字幕一区二区| 一本色道久久88综合日韩精品| 日韩成人午夜| 99在线视频精品| 国产成在线观看免费视频 | 亚洲一区二区日韩欧美gif| 亚洲视屏在线观看| 青青热久麻豆精品视频在线观看| 日韩高清成人| 久草网视频在线| 大乳丰满人妻中文字幕日本| 亚洲日韩久久综合中文字幕|