VC++中MFC用Ado连接数据库小结文档格式.docx
《VC++中MFC用Ado连接数据库小结文档格式.docx》由会员分享,可在线阅读,更多相关《VC++中MFC用Ado连接数据库小结文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
![VC++中MFC用Ado连接数据库小结文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/28/267a2418-e088-4638-9209-00eed2e5d76f/267a2418-e088-4638-9209-00eed2e5d76f1.gif)
PersistSecurityInfo=False;
InitialCatalog=RuleDB_Data;
DataSource=PYE”即为连接字符串。
注意,若数据库位于本机,在选择填写服务器一栏可直接填写(local),记得一定要加括号。
4.连接数据库
在这里引入一个编写好的封装类:
ADOConn。
该类封装了连接数据库,对数据库进行添加、删除、修改操作及获取查询记录集操作的方法。
用户可直接使用,这个类的头文件和cpp文件内容将在本文最后给出。
在一个工程里加入该类的方法为:
把该类的头文件和cpp文件拷贝到工程所在的文件夹里。
然后在工程的工作区选择Project->
AddtoProject->
Files,将这两个文件选择加入。
之后,就可以在程序里应用这个类了。
首先在要用到数据库的类的头文件里设一个该类的对象,即加入代码:
ADOConnm_Ado;
注意:
记得要先在最前面加入#include"
ADOConn.h"
。
在应用这个对象对数据库进行操作之前,先对其初始化:
m_Ado.OnInitADOConn(strConnect);
其中strConnect即为上面获取的连接字符串。
若要获取数据库中的部分记录集,用m_Ado.GetRecordSet(strSql);
其中strSql中存放查询语句,查询结果存放于m_Ado.m_pRecordset中,然后可用GetCollect()函数挨个获取所有符合条件的记录的各个字段的值。
用完后记得用m_Ado.m_pRecordset.Close()关闭记录集。
添加、修改、删除操作,均用m_Ado.ExecuteSQL(strSql);
语句完成。
此外,若同时需要多种记录集,则还需在要用到数据库的类的头文件里添加记录集的对象,即_RecordsetPtrm_pRecordset;
m_pRecordset在用之前也需初始化,初始化语句为:
m_pRecordset.CreateInstance(__uuidof(Recordset));
,同样的,每回记录集用完之后也得用Close()函数关闭。
5.若在数据库应用程序编译时遇到102个错误,则可把Debug文件夹删了重新编译即可。
ADOConn类的头文件:
#if!
defined(AFX_ADOCONN_H__2B491720_FA04_4800_B616_219E55ABEA46__INCLUDED_)
#defineAFX_ADOCONN_H__2B491720_FA04_4800_B616_219E55ABEA46__INCLUDED_
#if_MSC_VER>
1000
#pragmaonce
#endif//_MSC_VER>
classADOConn:
publicCObject
{
public:
//添加一个指向Connection对象的指针:
_ConnectionPtrm_pConnection;
//添加一个指向Recordset对象的指针:
_RecordsetPtrm_pRecordset;
charerror[1024];
_ConnectionPtr&
GetConnPtr()
{returnm_pConnection;
}
_RecordsetPtr&
GetRecoPtr()
{returnm_pRecordset;
//事务回滚
BOOLRollbackTrans();
//递交事务
BOOLCommitTrans();
//事务开始
BOOLBeginTrans();
BOOLadoBOF();
//头
BOOLadoEOF();
//尾
BOOLMoveNext();
//下一个
BOOLCloseTable();
//关闭表
BOOLCloseADOConnection();
//关闭连接
BOOLGetCollect(LPCTSTRName,CString&
lpDest);
//获取某个字段的值
//执行SQL语句包含updatedeleteinsert
BOOLExecuteSQL(LPCTSTRlpszSQL);
//初始化连接数据库
BOOLOnInitADOConn(LPCTSTRConnStr);
//执行select语句获取记录集
GetRecordSet(LPCTSTRlpszSQL);
ADOConn();
virtual~ADOConn();
};
#endif//!
classCADOException:
publicCException
//Constructor
CADOException(char*pchMessage);
~CADOException(){}
CStringm_strMessage;
virtualBOOLGetErrorMessage(LPTSTRlpstrError,UINTnMaxError,
PUINTpnHelpContext=NULL);
private:
intm_nError;
ADOConn类的cpp文件:
#include"
stdafx.h"
#ifdef_DEBUG
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#definenewDEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
ADOConn:
ADOConn()
memset(error,0,1024);
~ADOConn()
//CADOExceptionClass
CADOException:
CADOException(char*pchMessage)
m_strMessage=pchMessage;
m_nError=GetLastError();
BOOLCADOException:
GetErrorMessage(LPTSTRlpstrError,UINTnMaxError,PUINTpnHelpContext/*=NULL*/)
chartext[200];
if(m_nError==0)
wsprintf(text,"
%serror"
(constchar*)m_strMessage);
else
%serror#%d"
(constchar*)m_strMessage,m_nError);
strncpy(lpstrError,text,nMaxError-1);
returnTRUE;
BOOLADOConn:
OnInitADOConn(LPCTSTRConnStr)
try
//创建Connection对象
m_pConnection.CreateInstance("
ADODB.Connection"
);
//设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_tstrConnect=_bstr_t(ConnStr);
//"
Provider=SQLOLEDB;
Server=127.0.0.1;
Database=EventLogg;
uid=event;
pwd=event;
"
;
m_pConnection->
Open(strConnect,"
adModeUnknown);
//捕捉异常
catch(_com_errore)
//显示错误信息
TRACE(e.Description());
//sprintf(error,"
连接数据库失败请检查连接字符串\r\n当前连接字符串为:
%s"
ConnStr);
//thrownewCADOException(error);
thrownewCADOException("
连接数据库失败"
ExecuteSQL(LPCTSTRlpszSQL)
//_variant_tRecordsAffected;
//Connection对象的Execute方法:
(_bstr_tCommandText,
//VARIANT*RecordsAffected,longOptions)
//其中CommandText是命令字串,通常是SQL命令。
//参数RecordsAffected是操作完成后所影响的行数,
//参数Options表示CommandText的类型:
adCmdText-文本命令;
adCmdTable-表名
//adCmdProc-存储过程;
adCmdUnknown-未知
Execute(_bstr_t(lpszSQL),NULL,adCmdText);
returntrue;
\t执行SQL语句失败\r\nSQL语句为:
lpszSQL);
执行SQL语句失败"
//执行SELECT语句,获得结果集,结果集放在m_pRecordset中
ADOConn:
GetRecordSet(LPCTSTRlpszSQL)
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->
Open(_bstr_t(lpszSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
\t执行SELECT语句失败\r\nSELECT语句为:
执行SELECT语句失败"
//返回记录集
returnm_pRecordset;
GetCollect(LPCTSTRName,CString&
lpDest)
VARIANTvt;
vt=m_pRecordset->
GetCollect(Name);
/*_bstr_tbstr=(_bstr_t)vt;
if(lpDest!
="
strcpy(lpDest,bstr);
}*/
if(vt.vt!
=VT_NULL)
lpDest=(LPCSTR)_bstr_t(vt);
else
lpDest="
catch(_com_errore)
sprintf(error,"
获取字段:
%s值失败"
Name);
thrownewCADOException(error);
//关闭数据库
CloseADOConnection()
Close();
sprintf(error,e.Description());
关闭数据库失败"
//关表
CloseTable()
关闭表失败"
MoveNext()
MoveNext();
结果集移向下一个失败"
adoEOF()
returnm_pRecordset->
adoEOF;
adoBOF()
BOF;
BeginTrans()
BeginTrans();
catch(_com_errore)
事务开始失败"
}
//递交事务
CommitTrans()
CommitTrans();
递交事务失败"
RollbackTrans()
RollbackTrans();
回滚事务失败"