VC 下使用ADO連線Access資料庫

2021-07-24 13:34:51 字數 4321 閱讀 4452

#import "c:\program files\common files\system

\ado

\msado15.dll" \

/* no_namespace \ */

rename_namespace ("adodb")\

rename ("eof", "adoeof")

在mfc中可以用

afxoleinit();
非mfc環境中用:

coinitialize(null);

couninitialize();

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

例子:連線access資料庫

m_pconnection.createinstance(__uuidof(connection));

trycatch(_com_error e)

//如果資料庫連線有效

if(m_pconnection->state)

m_pconnection->close();

m_pconnection=

null;

//設定連線時間

pconnection->put_connectiontimeout(long(5));

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

_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個字段的值

m_precordset->getcollect("name");

//或者

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

二是

precordset->get_collect("column_name");

//或者

precordset->get_collect(long(index));

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

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

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

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

try

catch(_com_error *e)

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

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

_commandptr  m_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;iitem[i]->get_name(&bstrcolname);i++) //得到記錄集//中的欄位名

strcolname=bstrcolname;

namefield = strcolname;

m_fieldslist.addstring(namefield);

}if(succeeded(hr))

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

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

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

b)、_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#

VC下使用ADO操作

使用ado sql操作各類資料庫是當前的主流,本人結合自己學習和使用ado開發資料庫的親身經歷,給大家一起分享利用ado開發遇到的常見問題和解決方案。本人開發環境為vc6.0,作業系統windowsxp。運算元據庫,拿最簡單的access來說,不少人使用odbc,本人在學習之初也使用過odbc,但小...

VC 使用ADO連線SQL Server資料庫

vc 使用ado連線sql server資料庫 基本步驟 1.建立乙個基於對話方塊的應用程式adodatabase。2.建立乙個用來連線的ado類庫。系統選單中insert new class項,class type選擇generic class 在name後輸入類名 adoconn 點ok。這樣,...

VC使用UDL檔案建立ADO連線

最近在改乙個vc的專案,需要靈活的配置資料庫連線,我用到了資料鏈結檔案,使用 udl檔案必須在系統中先安裝 microsoft mdac win 2000以後的版本 中都自動包含了該元件。關於udl的使用只強調兩點。m pconnection connectionstring file name m...