資源描述:
《參考資料VC中利用ADO共同實(shí)現(xiàn)數(shù)據(jù)庫的操作》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、VC中利用ADO共同實(shí)現(xiàn)數(shù)據(jù)庫的操作 ADO是應(yīng)用層的編程接口,它通過OLEDB提供的COM接口訪問數(shù)據(jù),它適合于各種客戶機(jī)/服務(wù)器應(yīng)用系統(tǒng)和基于Web的應(yīng)用,尤其在一些腳本語言中訪問數(shù)據(jù)庫操作是ADO的主要優(yōu)勢。ADO是一套用自動(dòng)化技術(shù)建立起來的對(duì)象層次結(jié)構(gòu),它比其他的一些對(duì)象模型如DAO(DataAccessObject)、RDO(RemoteDataObject)等具有更好的靈活性,使用更為方便,并且訪問數(shù)據(jù)的效率更高。SQL是強(qiáng)大的數(shù)據(jù)庫操作系統(tǒng),通過ADO和SQL語句的配合,我們可以的實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的一系列操作,例如創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、創(chuàng)建索引
2、,實(shí)現(xiàn)數(shù)據(jù)庫的多重查詢、高級(jí)查詢和數(shù)據(jù)的匯總等技術(shù)。下面通過例程介紹如何通過ADO和SQL語句的配合實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作?! 〉谝徊剑和ㄟ^Access創(chuàng)建數(shù)據(jù)庫test.mdb?! 〉诙剑簞?chuàng)建單文檔工程testado,所有的選項(xiàng)都取默認(rèn)值?! 〉谌剑篊OM庫的初始化 我們可以使用AfxOleInit()來初始化COM庫,這項(xiàng)工作通常在CWinApp::InitInstance()的重載函數(shù)中完成,請(qǐng)看如下代碼: BOOLCADOTest1App::InitInstance() { AfxOleInit(); ...... 第四步:
3、用#import指令引入ADO類型庫 我們?cè)趕tdafx.h中加入如下語句: #import"c:programfilescommonfilessystemadomsado15.dll"no_namespacerename("EOF","adoEOF")這一語句有何作用呢?其最終作用同我們熟悉的#include類似,編譯的時(shí)候系統(tǒng)會(huì)為我們生成msado15.tlh,ado15.tli兩個(gè)C++頭文件來定義ADO庫?! 〉谖宀剑涸趖estadoview.h中定義一個(gè)指向Connection對(duì)象的指針:_ConnectionPtr_pConne
4、ction; 第六步:添加如下代碼:voidCTestadoView::OnInitialUpdate(){CView::OnInitialUpdate();HRESULThr;11try{hr=m_pConnection.CreateInstance("ADODB.Connection");//創(chuàng)建Connection對(duì)象if(SUCCEEDED(hr)){hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=test.mdb","","",adModeUnknown)
5、;///連接數(shù)據(jù)庫///上面一句中連接字串中的Provider是針對(duì)ACCESS2000環(huán)境的}}}catch(_com_errore)///捕捉異常{CStringerrormessage;errormessage.Format("連接數(shù)據(jù)庫失敗!r錯(cuò)誤信息:%s",e.ErrorMessage());AfxMessageBox(errormessage);///顯示錯(cuò)誤信息}} 第七步:在析構(gòu)函數(shù)中關(guān)閉Connection對(duì)象并將其釋放,代碼如下:CTestadoView::~CTestadoView(){m_pConnection->Clo
6、se();m_pConnection.Release();} 第八步:添加菜單項(xiàng)"創(chuàng)建數(shù)據(jù)庫表",并添加相應(yīng)的消息處理函數(shù),然后添加代碼如下:voidCTestadoView::OnAddtable(){_variant_tRecordsAffected;m_pConnection->Execute("CREATETABLEnew(IDINTEGER,usernameTEXT,oldINTEGER)",&RecordsAffected,adCmdText);} 運(yùn)行程序,執(zhí)行菜單當(dāng)中的命令"添加表",我們可以發(fā)現(xiàn)數(shù)據(jù)庫中已經(jīng)添加了一個(gè)表new,其中的
7、字段有我們定義的字段。 第九步:添加菜單項(xiàng)"刪除數(shù)據(jù)庫表",并添加相應(yīng)的消息處理函數(shù),然后添加代碼如下:11voidCTestadoView::OnDeleteTable(){_variant_tRecordsAffected;m_pConnection->Execute("DROPTABLEnew",&RecordsAffected,adCmdText);} 運(yùn)行程序,執(zhí)行菜單當(dāng)中的命令"刪除表",我們可以發(fā)現(xiàn)數(shù)據(jù)庫中剛才添加的表new已被刪除?! 〉谑剑禾砑硬藛雾?xiàng)"添加一列",并添加相應(yīng)的消息處理函數(shù),然后添加代碼如下:voidCTestado
8、View::OnAddColumn(){_variant_tRecordsAff