VC中使用ADO運算元據庫的方法

2021-06-21 14:22:10 字數 3820 閱讀 7606

#import "c:\program files\common files\system\ado\msado15.dll" \

no_namespace \

rename ("eof", "adoeof") 

在mfc中可以用afxoleinit();非mfc環境中用:

coinitialize(null);

couninitialize(); 

例子:連線access資料庫

afxoleinit();//初始化

hresult hr;

try}

catch(_com_error e)///捕捉異常 

//如果資料庫連線有效

if( m_pconnection->state )

m_pconnection->close();

m_pconnection = null;  

//設定連線時間 -----------------------------------

pconnection->put_connectiontimeout(long(5));

_recordsetptr m_precordset;

m_precordset.createinstance(__uuidof(recordset));

// 在ado操作中建議語句中要常用 try...catch()來捕獲錯誤資訊,

// 因為它有時會經常出現一些意想不到的錯誤。jingzhou xu

trycatch(_com_error *e) 

m_precordset->close(); 

a)、用precordset->adoeof來判斷資料庫指標是否已經移到結果集的末尾了;m_precordset->bof判斷是否 在第一條記錄前面:

while(!m_precordset->adoeof) 

b)、取得乙個欄位的值的辦法有兩種辦法

一是//表示取得第0個字 段的值

rdset->getcollect("name");

// 或者

rdset->getcollect(_variant_t(long(0));

二是precordset->get_collect("column_name");

//或者 

precordset->get_collect(long(index)); 

呼叫m_precordset->addnew();

呼叫m_precordset->putcollect();給每個字段賦值

呼叫m_precordset->update();確認

a)、把記錄指標移動到要刪除的記錄上,然後呼叫

delete(adaffectcurrent)

trycatch(_com_error *e) 

_commandptr m_pcommand;

m_pcommand.createinstance(__uuidof(command));

// 將庫連線賦於它

m_pcommand->activeconnection = m_pconnection; 

// sql語句

m_pcommand->commandtext = "select * from demotable"; 

// 執行sql語句,返回記錄集

m_precordset = m_pcommand->execute(null, null,adcmdtext); 

_recordsetptr connection15::execute ( _bstr_t commandtext,

variant * recordsaffected,

long options ) 

其中commandtext是命令字串,通常是sql命令。

引數recordsaffected是操作完成後所影響的行數,

引數options表示commandtext中內容的型別,options可以取如下值之一:

例子:_variant_t recordsaffected;

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

_commandptrm_pcommand;

m_pcommand.createinstance(__uuidof(command));

m_pcommand->activeconnection = m_pconnection;  // 將庫連線賦於它

m_pcommand->commandtext = "demo"; 

m_pcommand->execute(null,null, adcmdstoredproc); 

_connectionptr m_pconnect;

_recordsetptr pset;

hresult hr;

try     

pset->movenext();   

} pset->close(); 

} m_pconnect->close(); 

}catch(_com_error e)///捕捉異常 

field *  field = null;

hresult  hr;

fields *  fields = null;

hr = m_precordset->get_fields (&fields);//得到記錄集的字段集和

if(succeeded(hr))

fields->get_count(&colcount);

//得到記錄集的字段集合中的字段的總個數

for(i=0;i ...

item[i]->get_name(&bstrcolname);//得到記錄集//中的欄位名

strcolname=bstrcolname;

namefield = strcolname;

m_fieldslist.addstring(namefield);

}if(succeeded(hr))

fields->release();//釋放指標 

(1)、一般傳給這3個指標的值都不是mfc直接支援的資料型別,而要用_variant_t轉換一下

_variant_t(xx)可以把大多數型別的變數轉換成適合的型別傳入

(2)、_variant_t var;

_variant_t -> long: (long)var;

_variant_t -> cstring: cstring strvalue = (lpcstr)_bstr_t(var);

cstring -> _variant_t: _variant_t(strsql);

bstr bstr;

cstring strsql;

cstring -> bstr: bstr = strsql.allocsysstring();

bstr -> cstring: strsql = (lpcstr)bstr;

_bstr_t bstr;

cstring strsql;

cstring -> _bstr_t: bstr = (_bstr_t)strsql;

_bstr_t -> cstring: strsql = (lpcstr)bstr;

access:表示時間的字串#2004-4-5#

sql:表示時間的字串''2004-4-5''

datefield(時間字段)

select * from my_table where datefield > #2004-4-10#

try

catch(_com_error e)///捕捉異常

VC中使用ADO運算元據庫的方法

1 引入ado類 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2 初始化com 在mfc中可以用afxoleinit 非mfc環境中用 coinitialize n...

VC中使用ADO運算元據庫的方法

準備工作 1 引入ado類 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2 初始化com 在mfc中可以用afxoleinit 非mfc環境中用 coinitial...

ADO介面運算元據庫

ado三種介面 connectionptr commandptr recordsetptr connectionptr 返回乙個記錄集或乙個空指標,通常用來常見乙個資料庫連線或者執行一條不返回任何結構的sql語句。最好不要用於返回乙個記錄集。常用的方法是open 和execute commandpt...