VC ADO連線資料庫操作

2021-05-22 00:20:31 字數 4561 閱讀 3513

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(null);

couninitialize();

(3)#import 包含後就可以用3個智慧型指標了:_connectionptr、_recordsetptr和_commandptr

1.連線和關閉資料庫(1)連線

例子:連線access資料庫

afxoleinit();//初始化

hresult hr;

try}

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

(2)、關閉

//如果資料庫連線有效

if( m_pconnection->state )

m_pconnection->close();

m_pconnection = null; 

(3)、設定連線時間 //設定連線時間-----------------------------------

pconnection->put_connectiontimeout(long(5));

2.開啟乙個結果集

(1)開啟,首先建立乙個_recordsetptr例項,然後呼叫open()得到一條sql語句的執行結果

_recordsetptrm_precordset;

m_precordset.createinstance(__uuidof(recordset));

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

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

trycatch(_com_error *e)

(2)關閉結果集 m_precordset->close();

3.操作乙個結果集

(1)、遍歷(讀取)

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

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

一是//表示取得第0個字段的值 m_precordset->getcollect("name");

或者 m_precordset->getcollect(_variant_t(long(0));

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

或者 precordset->get_collect(long(index));

(2)、新增

a)、呼叫m_precordset->addnew();

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

c)、呼叫m_precordset->update();確認

(3)、修改

(4)、刪除

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

catch(_com_error *e)

4.直接執行sql語句,除了要用到結果集其餘的大部分功能都可以直接用sql語言實現

(1)、用_commandptr和_recordsetptr配合

_commandptrm_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);

(2)、直接用_connectionptr執行sql語句

_recordsetptr connection15::execute ( _bstr_t commandtext,

variant * recordsaffected,

long options )

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

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

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

adcmdtext:表明commandtext是文字命令

adcmdtable:表明commandtext是乙個表名

adcmdproc:表明commandtext是乙個儲存過程

adcmdunknown:未知

例子:_variant_t recordsaffected;

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

5.呼叫儲存過程

(1)、利用_commandptr

_commandptrm_pcommand;

m_pcommand.createinstance(__uuidof(command));

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

m_pcommand->commandtext = "demo"; 

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

(2)、直接用_connectionptr直接呼叫(見4.(2))

6.遍歷資料庫中的所有表名 _connectionptr m_pconnect;

_recordsetptr pset;

hresult hr;

try

pset->movenext();   

}  

pset->close(); 

}  m_pconnect->close(); 

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

7.遍歷乙個表中的所有字段

field *   field = null;

hresult   hr;

fields *  fields = null;

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

if(succeeded(hr))

fields->get_count(&colcount);

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

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

strcolname=bstrcolname;

namefield = strcolname;

m_fieldslist.addstring(namefield);

}if(succeeded(hr))

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

附:1、_variant_t

(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);

2、bstr寬字串與cstring相互轉換

bstr bstr;

cstring strsql;

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

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

3、_bstr_t與cstring相互轉換

_bstr_t bstr;

cstring strsql;

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

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

4、關於時間

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

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

datefield(時間字段) select * from my_table where datefield > #2004-4-10#

trycatch(_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連線資料庫

ado activex data object 是microsoft資料庫應用程式開發的新介面,是建立在ole db之上的高層資料庫訪問技術,即使你對ole db,com不了解也能輕鬆對付ado,因為它非常簡單易用,甚至比你以往所接觸的odbc api dao rdo都要容易使用,並不失靈活性。下面...

基於VC ADO元件連線資料庫程式設計

1.1 連線物件 connection 連線物件是用來與資料庫建立連線 執行查詢以及進行事務處理。在連線之前必須指定使用哪乙個ole db 者。1.2 命令物件 命令物件 command 可以執行資料庫操作命令 例如查詢 修改 插入和刪除等 用命令物件執行乙個查詢子串,可以返回乙個記錄集合。2.利用...