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