ADO 操作SqlServer資料庫

2021-09-30 03:48:57 字數 3022 閱讀 1724

_connectionptr物件:

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執行完後返回乙個指向記錄集的指標,下面我們給出具體**並作說明。

_variant_t recordsaffected;

///執行sql命令:create table建立**users,users包含四個字段:整形id,字串username,整形old,日期型birthday

m_pconnection->execute("create table users(id integer,username text,old integer,birthday datetime)",&recordsaffected,adcmdtext);

///往**裡面新增記錄

m_pconnection->execute("insert into users(id,username,old,birthday) values (1, 'washington',25,'1970/1/1')",&recordsaffected,adcmdtext);

///將所有記錄old欄位的值加一

m_pconnection->execute("update users set old = old+1",&recordsaffected,adcmdtext);

///執行sql統計命令得到包含記錄條數的記錄集

m_precordset = m_pconnection->execute("select count(*) from users",&recordsaffected,adcmdtext);

_variant_t vindex = (long)0;

_variant_t vcount = m_precordset->getcollect(vindex);///取得第乙個欄位的值放入vcount變數

m_precordset->close();///關閉記錄集

cstring message;

message.format("共有%d條記錄",vcount.lval);

afxmessagebox(message);///顯示當前記錄條數

command物件來執行sql命令

_commandptr m_pcommand;

m_pcommand.createinstance("adodb.command");

_variant_t vnull;

vnull.vt = vt_error;

vnull.scode = disp_e_paramnotfound;///定義為無引數

m_pcommand->activeconnection = m_pconnection;///非常關鍵的一句,將建立的連線賦值給它m_pcommand->commandtext = "select * from users";///命令字串

m_precordset = m_pcommand->execute(&vnull,&vnull,adcmdtext);///執行命令,取得記錄集

在這段**中我們只是用command物件來執行了select查詢語句,command物件在進行儲存過程的呼叫中能真正體現它的作用

recordset物件進行查詢取得記錄集

根據我們剛才通過執行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();///儲存到庫中

關閉記錄集與連線

記錄集或連線都可以用close方法來關閉

m_precordset->close();///關閉記錄集

m_pconnection->close();///關閉連線

MFC通過ADO連線SQL SERVER資料庫

以乙個mfc的dialog應用程式為例。1.首先是引入msado15.dll。在stdafx.h中加入 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2.初始化com...

MFC使用ADO連線SQL Server資料庫

1.首先,要用 import語句來引用支援ado的元件型別庫 tlb 其中型別庫可以作為可執行程式 dll exe等 的一部分被定位在其自身程式中的附屬資源裡,如 被定位在msado15.dll的附屬資源中,只需要直接用 import引用它既可。可以直接在stdafx.h檔案中加入下面語句來實現 i...

ADO讀寫SQlServer資料庫

寫入時間值 coledatetime oledate coledatetime getcurrenttime variant t vtfld vtfld.vt vt date vtfld.date oledate precordset4 putcollect date vtfld 讀時間值 bstr...