新增到stdafx.h這個標頭檔案中。(2)、初始化***#import "c:/program files/***mon files/system/ado/msado15.dll" /
no_namespace /
rename ("eof", "adoeof")
在mfc中可以用afxoleinit();
如果是基於對話方塊的mfc程式,那麼請在oninitdialg()函式中新增afxoleinit().如果是基於文件/檢視類的mfc程式,那麼請在initinstance()函式中新增afxoleinit().
用來初始化***
非mfc環境中用:
coinitialize(null);
couninitialize();
(3)#import 包含後就可以用3個智慧型指標了:_connectionptr、_recordsetptr和_***mandptr,通過這三個智慧型指標基本上
上能滿足對資料庫的操作。
1.連線和關閉資料庫 (1)連線
例子:連線access資料庫
m_pconnection.createinstance(__uuidof(connection)); // 注:__uuidof用來獲取後面表示式的guid值。(2)、關閉try
catch(_***_error e)
//如果資料庫連線有效
if(m_pconnection->state)(3)、設定連線時間 //設定連線時間-----------------------------------m_pconnection->close();
m_pconnection= null;
pconnection->put_connectiontimeout(long(5));2.開啟乙個結果集
(1)開啟,首先建立乙個_recordsetptr例項,然後呼叫open()得到一條sql語句的執行結果
_recordsetptr m_precordset;(2)關閉結果集m_precordset.createinstance(__uuidof(recordset));
// 在ado操作中建議語句中要常用try...catch()來捕獲錯誤資訊,
// 因為它有時會經常出現一些意想不到的錯誤。
trycatch(_***_error *e)
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)
try4.直接執行sql語句,除了要用到結果集其餘的大部分功能都可以直接用sql語言實現catch(_***_error *e)
(1)、用_***mandptr和_recordsetptr配合
_***mandptr m_p***mand;(2)、直接用_connectionptr執行sql語句m_p***mand.createinstance(__uuidof(***mand));
// 將庫連線賦於它
m_p***mand->activeconnection = m_pconnection;
// sql語句
m_p***mand->***mandtext = "select * from demotable";
// 執行sql語句,返回記錄集
m_precordset = m_p***mand->execute(null, null,adcmdtext);
_recordsetptr connection15::execute ( _bstr_t ***mandtext,5.呼叫儲存過程variant * recordsaffected,
long options )
其中***mandtext是命令字串,通常是sql命令。
引數recordsaffected是操作完成後所影響的行數,
引數options表示***mandtext中內容的型別,options可以取如下值之一:
adcmdtext:表明***mandtext是文字命令
adcmdtable:表明***mandtext是乙個表名
adcmdproc:表明***mandtext是乙個儲存過程
adcmdunknown:未知
例子:
_variant_t recordsaffected;
m_pconnection->execute("update users set old = old+1",&recordsaffected,adcmdtext);
(1)、利用_***mandptr
_***mandptr m_p***mand;(2)、直接用_connectionptr直接呼叫(見4.(2))m_p***mand.createinstance(__uuidof(***mand));
m_p***mand->activeconnection = m_pconnection; // 將庫連線賦於它
m_p***mand->***mandtext = "demo";
m_p***mand->execute(null,null, adcmdstoredproc);
6.遍歷資料庫中的所有表名
_connectionptr m_pconnect;7.遍歷乙個表中的所有字段_recordsetptr pset;
hresult hr;
try
pset->movenext();
}
pset->close();
}
m_pconnect->close();
}catch(_***_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、_variant_t
(1)、一般傳給這3個指標的值都不是mfc直接支援的資料型別,而要用_variant_t轉換一下
_variant_t(xx)可以把大多數型別的變數轉換成適合的型別傳入:
(2)、_variant_t var;
_variant_t -> long: (long)var;2、bstr寬字串與cstring相互轉換_variant_t -> cstring: cstring strvalue = (lpcstr)_bstr_t(var);
cstring -> _variant_t: _variant_t(strsql);
bstr bstr;3、_bstr_t與cstring相互轉換cstring strsql;
cstring -> bstr: bstr = strsql.allocsysstring();
bstr -> cstring: strsql = (lpcstr)bstr;
_bstr_t bstr;4、關於時間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編寫資料庫程式
準備 1 引入ado類 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2 初始化com 在mfc中可以用afxoleinit 非mfc環境中用 coinitializ...
VC 下使用ADO編寫資料庫程式
準備 1 引入ado類 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2 初始化com 在mfc中可以用afxoleinit 非mfc環境中用 coinitializ...
VC 下使用ADO編寫資料庫程式
vc 下使用ado編寫資料庫程式 準備 1 引入ado類 import c program files common files system ado msado15.dll no namespace rename eof adoeof 2 初始化com 在mfc中可以用afxoleinit 非mf...