vc++ado連線資料庫
一、ado簡介
ado(activex data object)是microsoft資料庫應用程式開發的新介面,是建立在ole db之上的高層資料庫訪問技術,請不必為此擔心,即使你對ole db,com不了解也能輕鬆對付ado,因為它非常簡單易用,甚至比你以往所接觸的odbc api、dao、rdo都要容易使用,並不失靈活性。本文將詳細地介紹在vc下如何使用ado來進行資料庫應用程式開發,並給出示例**。 本文示例**
二、基本流程
萬事開頭難,任何一種新技術對於初學者來說最重要的還是「入門」,掌握其要點。讓我們來看看ado資料庫開發的基本流程吧!
(1)初始化com庫,引入ado庫定義檔案
(2)用connection物件連線資料庫
(3)利用建立好的連線,通過connection、command物件執行sql命令,或利用recordset物件取得結果記錄集進行查詢、處理。
下面我們將詳細介紹上述步驟並給出相關**。
用#import指令引入ado型別庫 我們在stdafx.h中加入如下語句:
(stdafx.h這個檔案**可以找到?你可以在fileview中的header files裡找到) #import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("eof","adoeof")
這一語句有何作用呢?其最終作用同我們熟悉的#i nclude類似,編譯的時候系統會為我們生成msado15.tlh,ado15.tli兩個c++標頭檔案來定義ado庫。
建立connection物件並連線資料庫 首先我們需要新增乙個指向connection物件的指標: _connectionptr m_pconnection; 下面的**演示了如何建立connection物件例項及如何連線資料庫並進行異常捕捉。
bool cadotest1dlg::oninitdialog()
;server=127.0.0.1;database=vckbase;uid=sa;pwd=139","","",admodeunknown); 其中server是sql伺服器的名稱,database是庫的名稱 connection物件除open方法外還有許多方法,我們先介紹connection物件中兩個有用的屬性connectiontimeout與state connectiontimeout用來設定連線的超時時間,需要在open之前呼叫,例如: m_pconnection->connectiontimeout = 5;///設定超時時間為5秒 m_pconnection->open("data source=adotest;","","",admodeunknown); state屬性指明當前connection物件的狀態,0表示關閉,1表示已經開啟,我們可以通過讀取這個屬性來作相應的處理,例如: if(m_pconnection->state) m_pconnection->close(); ///如果已經開啟了連線則關閉它
執行sql命令並取得結果記錄集 為了取得結果記錄集,我們定義乙個指向recordset物件的指標:_recordsetptr m_precordset; 並為其建立recordset物件的例項: m_precordset.createinstance("adodb.recordset"); sql命令的執行可以採用多種形式,下面我們一進行闡述。
(1)利用connection物件的execute方法執行sql命令 execute方法的原型如下所示: _recordsetptr connection15::execute ( _bstr_t commandtext, variant * recordsaffected, long options ) 其中commandtext是命令字串,通常是sql命令。引數recordsaffected是操作完成後所影響的行數, 引數options表示commandtext中內容的型別,options可以取如下值之一:
adcmdtext:表明commandtext是文字命令
adcmdtable:表明commandtext是乙個表名
adcmdproc:表明commandtext是乙個儲存過程
adcmdunknown:未知
execute執行完後返回乙個指向記錄集的指標,下面我們給出具體**並作說明。
記錄集的遍歷、更新 根據我們剛才通過執行sql命令建立好的users表,它包含四個字段:id,username,old,birthday 以下的**實現:開啟記錄集,遍歷所有記錄,刪除第一條記錄,新增三條記錄,移動游標到第二條記錄,更改其年齡,儲存到資料庫。 _variant_t vusername,vbirthday,vid,vold; _recordsetptr m_precordset; m_precordset.createinstance("adodb.recordset"); m_precordset->open("select * from users",_variant_t((idispatch*)m_pconnection,true),adopenstatic,adlockoptimistic,adcmdtext); while(!m_precordset->adoeof)///這裡為什麼是adoeof而不是eof呢?還記得rename("eof","adoeof")這一句嗎? m_precordset->movefirst();///移到首條記錄 m_precordset->delete(adaffectcurrent);///刪除當前記錄 ///新增三條新記錄並賦值 for(int i=0;i<3;i++) m_precordset->move(1,_variant_t((long)adbookmarkfirst));///從第一條記錄往下移動一條記錄,即移動到第二條記錄處 m_precordset->putcollect(_variant_t("old"),_variant_t((long)45));///修改其年齡 m_precordset->update();///儲存到庫中
VC資料庫程式設計 ado
介紹 vc用ado訪問資料庫全攻略,介紹了vc用ado來訪問資料庫的各個物件及各方法,很經典,也很實用,很值得一看。讀者評分 10 評分次數 3 正文一 ado概述 ado是microsoft為最新和最強大的資料訪問範例 ole db 而設計的,是乙個便於使用的應用程式層介面。ado 使您能夠編寫應...
VC 資料庫程式設計 ADO和ODBC區別
有很多種使用資料庫的方法,對大多數資料庫來說,選擇c 這種產品也許並不適宜。我們知道,像dbase iv,foxpro,oracle和access這樣的產品是完全以資料庫管理為中心的。事實上,這些產品非常善於建立資料庫管理器,以至於它們確實並不善於做太多其它的工作。即使要用更通用化而非更專用化的資料...
VC中ADO程式設計
介紹 vc用ado訪問資料庫全攻略,介紹了vc用ado來訪問資料庫的各個物件及各方法,很經典,也很實用,很值得一看。正文 一 ado概述 ado是microsoft為最新和最強大的資料訪問範例 ole db 而設計的,是乙個便於使用的應用程式層介面。ado 使您能夠編寫應用程式以通過 ole.db ...