VC中使用ADO进行数据库开发的一些资料的整理
1.导入ado库
在StdAfx.h中,加入如下代码
#import \\\ no_namespace rename(\e(\
2.Com 初试化
在app的InitInstance中,加入 AfxOleInit();(MFC) 或者
CoInitialize(NULL) 如果用了CoInitialize
退出时,要调用CoUninitialize()
注意,如果在线程中也使用了com,那么在线程中也要用CoInitialize初始
3.连接数据库
_ConnectionPtr m_pAppConn;
hResult = m_pAppConn.CreateInstance(_T(\创建Connection对象
然后连接之
m_pAppConn->Open(\ Data Source = .\\\\DataBase\\\\aa.mdb\ \BOOL OpenConnect() {
HRESULT hResult; CloseConnect(); try {
hResult = m_pAppConn.CreateInstance(_T(\创建Connection对象 if(SUCCEEDED(hResult)) {
m_pAppConn->Open(\ Data Source = .\\\\DataBase\\\\aa.mdb\ \ } }
catch(_com_error e)///捕捉异常 {
CString errormessage;
errormessage.Format(_T(\连接数据库失败!\\r\\n错误信息:%s\ AfxMessageBox(errormessage); hResult = -1L; }
return (SUCCEEDED(hResult) ? TRUE : FALSE); }
这里连接的数据库是access数据库,在工程目录下的DataBase\\aa.mdb 关键连接的字符窜, 如果是access
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\\\192.168.1.1\\DataBase\\aa.mdb; 这是局域网上的文件
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\\\DataBase\\\\aa.mdb; 本机上的 如果是sql 2000
Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password=sa;Initial Catalog=aa;Data Source=192.168.1.1; 数据库在192.168.1.1上,数据库名字是aa
4.关闭连接
BOOL CloseConnect() {
HRESULT hResult=0; try {
if(m_pAppConn!=NULL) {
if(m_pAppConn->State!=adStateClosed) {
hResult=m_pAppConn->Close(); }
m_pAppConn.Release(); } }
catch(_com_error e) {
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE(_T(\\\n\ hResult=-1L; }
return (SUCCEEDED(hResult) ? TRUE : FALSE); }
5.使用recodeset打开记录
_variant_t RecordsAffected; _RecordsetPtr pRecordset = NULL;
strSql = _T(\ pRecordset.CreateInstance(_uuidof(Recordset));
pRecordset = pConn->Execute (_bstr_t(strSql) , &RecordsAffected , adCmdUnknown);
其中&RecordsAffected 可以获得有多少记录返回,这是记录的影像数目
6.关闭记录集
if(pRecordset != NULL && pRecordset->State) {
pRecordset->Close(); pRecordset = NULL; }
7.判断是否为空
if (pRecordset->adoBOF && pRecordset->adoEOF) {
//MessageBox(\没有符合条件的记录存在!\提示\ if(pRecordset != NULL && pRecordset->State) {
pRecordset->Close(); pRecordset = NULL; } return; }
8,从记录集取数据
_variant_t var;
pRecordset->MoveFirst();
for(;!pRecordset->adoEOF;pRecordset->MoveNext()) {
var = pRecordset->GetCollect(_T(\ }
9.几种常见数据的转换 如果是字符窜的字段
var = pRecordset->GetCollect(_T(\ if(var.vt!=VT_NULL) {
str= (LPCTSTR)_bstr_t(var); }
if(var.vt!=VT_NULL)
判断是必须的,如果是空,转换会出错 如果是int形 int aa = atoi(str)
_variant_t是个可变类型,支持很多种类型,
相关推荐: