一、ado模型常用三個物件
連線物件connection
通過連線可以從應用程式中訪問資料來源。連線時必須指定要連線的資料來源以及連線所
使用的使用者名稱和使用者口令。
命令物件command
可以通過已建立的連線發出命令,從而對資料來源進行指定操作。一般情況下,命令可
以在資料來源中新增、修改或刪除資料,也可以檢索資料。
記錄集物件recordset
查詢命令可以將查詢結果儲存在本地,這些資料以行為單位,返回資料的集合被稱為
記錄集
ado 模型中常用的物件為connection 物件、command 物件、recordset 物件。在使用
這 3 個物件的時候,需要定義與之對應的 3 個智慧型指標,分別為_connectionptr 、
_commandptr 和_recordsetptr。然後呼叫它們的createinstance 方法例項化,從而建立這3
個物件的例項。
二、_bstr_t 和 _variant_t 類
在利用ado 進行資料庫開發的時候,_bstr_t 和_variant_t 類很有用,省去了許多bstr
和variant 型別轉換的麻煩。
com 程式設計不使用cstring 類,因為com 必須設計成跨平台,它需要一種更普遍的方
法來處理字串和其他資料型別,這也是 variant 變數資料型別的來歷。
bstr 型別也是如此,用來處理com 中的字串。
variant 是乙個巨大的union 聯合體,幾乎包含了所有的資料型別,簡單來說,_variant_t 是乙個類,封裝了variant 的資料型別,並允許
進行強制型別轉換。同樣,_bstr_t 是對bstr 進行了封裝的類。
有了這兩個類,開發ado程式將得到很大的方便。在後面的例子中,將介紹它們的使用方法。
三、 1。當初始化 com 環境後,就可以建立與資料庫的連線。建立資料庫的連線需要使用連線物件connection。
2。利用 ado 查詢資料庫的記錄,需要使用記錄集物件 recordset。首先定義乙個_recordsetptr 型別的指標
3。利用open 方法開啟記錄集之後,就可以遍歷開啟的記錄集和獲取記錄集中的字段值。
遍歷記錄的時候,利用adoeof( )函式判斷記錄集是否到達末尾,如果沒有,可以繼續訪問
記錄集,否則退出while 迴圈。
4。ado 技術提供了三種新增記錄的方法,一是使用連線物件的execute 方法,二是使用
命令物件的execute 方法,三是使用記錄集物件的addnew 方法。
5。與新增記錄一樣,既可以使用連線物件的execute 方法,也可以使用命令物件的execute
方法,還可以使用記錄集物件進行操作來修改記錄,下面重點介紹使用記錄集物件修改記
錄的方法和步驟。
首先開啟記錄集,然後修改記錄集中的相應的字段值,最後呼叫update 方法,將修改
後的資料更新到資料庫中。
6。與資料庫建立連線成功後,需要對資料庫進行操作,比如,新增記錄、更新記錄、刪除記錄、查詢記錄,
可以用連線物件connection 的指標進行操作~但是更方便的是用記錄集recordset的指標m_precordset,推薦用m_precordset對資料庫進行操作~~
(因為記錄集物件本身就是用來和資料表中的各條記錄打交道的,所以用記錄集運算元據表更方便)
四、常用ado程式設計函式
1.建立三個常用物件的函式createinstance,eg:
m_pconnection.createinstance(__uuidof(connection))
m_precordset.createinstance(__uuidof(recordset))
2.連線物件中與資料庫建立連線的open函式,
hr = m_pconnection->open("provider=sqloledb.1;\
integrated security=sspi;\
initial catalog=test1;\
persist security info=false;\
data source=(local)","","",admodeunknown);
3.開啟資料庫(讀取記錄)的open函式,
m_precordset->open("select * from mytable", m_pconnection.getinte***ceptr(), adopendynamic, adlockoptimistic, adcmdunknown);
4.開啟資料記錄(執行sql語句,同上面的3)的execute函式,
_bstr_t strcmd="select * from [user]";
m_precordset=m_pconnection->execute(strcmd,&recordsaffected,adcmdtext)
5.利用m_precordset,可以對資料庫進行很多操作~~
(1)if(!m_precordset->bof)
m_precordset->movefirst(); // 判斷資料表是否為空~~
(2)m_precordset->movefirst()可以將指標移動到第一條記錄
(3)m_precordset->movenext()可以將指標往下移動一項
(4)m_precordset->moveprevious()可以將指標往前移動一項
(5)while (!m_precordset->adoeof) 可以一直讀取記錄,直到最後一條記錄
(6)m_precordset->getcollect("name") 獲取某一條記錄中,屬性為"name"這一列的資料(即,某個人的姓名)
(7)m_precordset->addnew()該函式是讓資料表新增一新行,只有新增完新行支行,再呼叫putcollect()才能把資料寫入
(8)m_precordset->putcollect("name",_bstr_t(m_name)) 和第(6)條剛好相反,這裡是從編輯框中獲取資料,然後寫入到資料表某一列中
(9)m_precordset->update() 寫入資料之後,要更新一下
(10)m_precordset->movelast() 移動到資料表中最後一條記錄
(11)m_precordset->close() 關閉記錄集
(12)m_precordset->move(cursel) 將記錄集移動到游標所指的位置
五、增刪改查常用函式
1.查詢的時候用到 getcollect 函式,
2.增加記錄的時候 用 addnew() putcollect() update()
m_precordset->addnew(); //用這種方法新增資料就必須用open 語句執行sql語句
m_precordset->putcollect("name", _variant_t(m_name));
m_precordset->putcollect("age", atol(m_age));
m_precordset->update();
m_precordset->close();
3.修改記錄的時候用move() putcollect() update()
m_precordset->move(cursel);
m_precordset->putcollect("name", _variant_t(m_name));
m_precordset->putcollect("age", atol(m_age));
m_precordset->update();
4.刪除記錄的時候用move() delete() update()
m_precordset->movefirst();
m_precordset->move(cursel);
m_precordset->delete(adaffectcurrent); //引數adaffectcurrent為刪除當前記錄
m_precordset->update();
m_precordset->close();
六、幾個函式用法的區別
m_precordset->open("操作字串"……) 這個可以開啟可編輯的記錄集,即,增刪改查都可以用。
m_pconnection->execute("操作字串"……) 是唯讀的記錄集,即只能執行查詢操作~~函式的返回值
就是唯讀的_recordsetptr
m_pconnection->open("操作字串"……) 這個開啟資料庫連線,所有的資料庫操作都是建立在資料庫連線上的。
ADO資料庫開發技術
ado的底層是ole db,所以不僅能訪問關係型資料庫,也能訪問非關係型資料庫,更是現在最快速的資料庫訪問中間層。1.ado主要物件介紹 ado物件包括 connection object 連線物件 command object 命令物件 recordset object 記錄集物件 field o...
ado mysql 開發 ADO資料庫開發技術
ado的底層是ole db,所以不僅能訪問關係型資料庫,也能訪問非關係型資料庫,更是現在最快速的資料庫訪問中間層。1.ado主要物件介紹 ado物件包括 connection object 連線物件 command object 命令物件 recordset object 記錄集物件 field o...
ADO資料庫開發技術 續)
使用資料庫訪問控制項。ado控制項使用microsoft activex資料物件 ado 來快速建立資料繫結的控制項和資料提供者的連線。activex資料繫結控制項開發技術使用了兩種activex控制項,一種是資料控制項,另一種資料繫結控制項。資料控制項 負責資料庫的連線和記錄集的獲取。vc 提供了...