ado方式操作数据库类.docx
- 文档编号:12565904
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:7
- 大小:17.15KB
ado方式操作数据库类.docx
《ado方式操作数据库类.docx》由会员分享,可在线阅读,更多相关《ado方式操作数据库类.docx(7页珍藏版)》请在冰豆网上搜索。
ado方式操作数据库类
ado方式操作数据库类
VC/MFC数据库新任版主zyq5945(竹叶青)在数据库版开设帖子整理的一些ADO数据库入门与例子,为了表示支持我在其中回复了一个自己平时用的ado操作数据库的类。
怎奈论坛对回帖字数有限制,结果只贴了头文件......不过竹叶青版主邀请我把这个类整理到博客里以便分享,我觉得这个办法不错。
不过既然要整理到博客里就应该更正式一些,所以花些时间规范了一下这个类,并且制作了一个简单的使用范例,也算是对竹版的支持,对数据库版的一点小小的贡献吧。
好久没写博客了,其实应该多说两句介绍一下这个类和其简单的使用。
不过自己在数据库方面确实知之甚少,这个类其实也是抄来的,只不过在自己的使用过程中“本土化”了一下,呵呵。
所以就不班门弄斧了,直接上代码吧,希望能对有志于涉足于数据库应用技术的同僚们有所帮助,按竹版的话说算是“入门实例”吧。
使用范例本例中操作的数据库为ACCESS2003,操作方式为本地连接,数据库带密码类实现代码头文件[cpp]viewplaincopy#pragmaonce#include"math.h"#import"MSADO15.DLL"rename_namespace("ADOWE")rename("EOF","EndOfFile")usingnamespaceADOWE;classCDBAdo{public:
_CommandPtrm_ptrCommand;//命令对象_RecordsetPtrm_ptrRecordset;//记录集对象_ConnectionPtrm_ptrConnection;//数据库对象CStringm_strConnect,//连接字符串m_strErrorMsg;//错误信息public:
CDBAdo(void);~CDBAdo(void);voidDetectResult(HRESULThResult);voidRecordErrorMsg(_com_errorcomError);CStringGetLastError(){returnm_strErrorMsg;}boolCreateInstance();boolSetConnectionString(CStringstrDriver,CStringstrIP,WORDwPort,CStringstrCatalog,CStringstrUserID,CStringstrPassword);boolSetConnectionString(CStringstrDriver,CStringstrDataSrc,CStringstrPassword);boolOpenConnection();boolCloseConnection();boolIsConnecting();voidClearAllParameters();voidAddParamter(LPCTSTRlpcsrName,ADOWE:
:
ParameterDirectionEnumDirection,ADOWE:
:
DataTypeEnumType,longlSize,_variant_t&vtValue);voidSetSPName(LPCTSTRlpcsrSPName);boolExecuteCommand(boolbIsRecordset);boolExecute(LPCTSTRlpcsrCommand);longGetReturnValue();boolOpenRecordset(char*szSQL);boolCloseRecordset();boolIsRecordsetOpened();boolIsEndRecordset();voidMoveToNext();voidMoveToFirst();voidMoveToLast();longGetRecordCount();boolGetFieldValue(LPCTSTRlpcsrFieldName,WORD&wValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,CString&strValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,INT&nValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,BYTE&bValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,LONG&lValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,DWORD&dwValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,UINT&ulValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,DOUBLE&dbValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,__int64&llValue);boolGetFieldValue(LPCTSTRlpcsrFieldName,COleDateTime&Time);boolGetFieldValue(LPCTSTRlpcsrFieldName,bool&bValue);};实现文件[cpp]viewplaincopy#include"StdAfx.h"#include"DBAdo.h"CDBAdo:
:
CDBAdo(void){m_strConnect=_T("");m_strErrorMsg=_T("");//初始化COMCoInitialize(NULL);}CDBAdo:
:
~CDBAdo(void){//关闭连接CloseConnection();//释放对象if(m_ptrCommand!
=NULL)m_ptrCommand.Release();if(m_ptrRecordset!
=NULL)m_ptrRecordset.Release();if(m_ptrConnection!
=NULL)m_ptrConnection.Release();}boolCDBAdo:
:
CreateInstance(){//创建对象m_ptrCommand.CreateInstance(__uuidof(Command));m_ptrRecordset.CreateInstance(__uuidof(Recordset));m_ptrConnection.CreateInstance(__uuidof(Connection));if(m_ptrCommand==NULL){m_strErrorMsg=_T("数据库命令对象创建失败");returnfalse;}if(m_ptrRecordset==NULL){m_strErrorMsg=_T("数据库记录集对象创建失败");returnfalse;}if(m_ptrConnection==NULL){m_strErrorMsg=_T("数据库连接对象创建失败");returnfalse;}//设置变量m_ptrCommand->CommandType=adCmdStoredProc;returntrue;}voidCDBAdo:
:
DetectResult(HRESULThResult){if(FAILED(hResult))_com_issue_error(hResult);}voidCDBAdo:
:
RecordErrorMsg(_com_errorcomError){_bstr_tbstrDescribe(comError.Description());m_strErrorMsg.Format(TEXT("ADO错误:
0x%8x,%s"),comError.Error(),(LPCTSTR)bstrDescribe);}boolCDBAdo:
:
SetConnectionString(CStringstrDriver,CStringstrIP,WORDwPort,CStringstrCatalog,CStringstrUserID,CStringstrPassword){CStringstrProvider,strPWD,strUID,strData,strDataSrc;strProvider.Format(_T("Provider=%s;"),strProvider);strPWD.Format(_T("Password=%s;"),strPassword);strUID.Format(_T("UserID=%s;"),strUserID);strData.Format(_T("InitialCatalog=%s;"),strCatalog);strDataSrc.Format(_T("DataSource=%s,%ld;"),strIP,wPort);//构造连接字符串m_strConnect=strProvider+strPWD+_T("PersistSecurityInfo=True;")+strUID+strData+strDataSrc;returntrue;}boolCDBAdo:
:
SetConnectionString(CStringstrDriver,CStringstrDataSrc,CStringstrPassword){CStringstrProvider,strDataSource,strPWD;strProvider.Format(_T("Provider=%s;"),strDriver);strDataSource.Format(_T("DataSource=%s;"),strDataSrc);strPWD.Format(_T("JetOLEDB:
DataBasePassword=%s;"),strPassword);//构造连接字符串m_strConnect=strProvider+_T("UserID=Admin;")+strDataSource+strPWD;returntrue;}boolCDBAdo:
:
OpenConnection(){try{//关闭连接CloseConnection();//连接数据库DetectResult(m_ptrConnection->Open(_bstr_t(m_strConnect),"","",adModeUnknown));m_ptrConnection->CursorLocation=adUseClient;m_ptrCommand->ActiveConnection=m_ptrConnection;returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
CloseConnection(){try{CloseRecordset();if((m_ptrConnection!
=NULL)&&(m_ptrConnection->GetState()!
=adStateClosed))DetectResult(m_ptrConnection->Close());returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
IsConnecting(){try{//状态判断if(m_ptrConnection==NULL)returnfalse;if(m_ptrConnection->GetState()==adStateClosed)returnfalse;//参数判断longlErrorCount=m_ptrConnection->Errors->Count;if(lErrorCount>0L){ErrorPtrpError=NULL;for(longi=0;i<lErrorCount;i++){pError=m_ptrConnection->Errors->GetItem(i);if(pError->Number==0x80004005)returnfalse;}}returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
OpenRecordset(char*szSQL){try{//关闭记录集CloseRecordset();m_ptrRecordset->Open(szSQL,m_ptrConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
CloseRecordset(){try{if(IsRecordsetOpened())DetectResult(m_ptrRecordset->Close());returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
IsRecordsetOpened(){if(m_ptrRecordset==NULL)returnfalse;if(m_ptrRecordset->GetState()==adStateClosed)returnfalse;returntrue;}boolCDBAdo:
:
IsEndRecordset(){try{return(m_ptrRecordset->EndOfFile==VARIANT_TRUE);}catch(_com_error&comError){RecordErrorMsg(comError);}returntrue;}voidCDBAdo:
:
MoveToNext(){try{m_ptrRecordset->MoveNext();}catch(_com_error&comError){RecordErrorMsg(comError);}}voidCDBAdo:
:
MoveToFirst(){try{m_ptrRecordset->MoveFirst();}catch(_com_error&comError){RecordErrorMsg(comError);}}voidCDBAdo:
:
MoveToLast(){try{m_ptrRecordset->MoveLast();}catch(_com_error&comError){RecordErrorMsg(comError);}}longCDBAdo:
:
GetRecordCount(){try{if(m_ptrRecordset==NULL)return0;returnm_ptrRecordset->GetRecordCount();}catch(_com_error&comError){RecordErrorMsg(comError);}return0;}voidCDBAdo:
:
ClearAllParameters(){try{longlParamCount=m_ptrCommand->Parameters->Count;if(lParamCount>0L){for(longi=lParamCount;i>0;i--){_variant_tvtIndex;vtIndex.intVal=i-1;m_ptrCommand->Parameters->Delete(vtIndex);}}}catch(_com_error&comError){RecordErrorMsg(comError);}}voidCDBAdo:
:
AddParamter(LPCTSTRlpcsrName,ADOWE:
:
ParameterDirectionEnumDirection,ADOWE:
:
DataTypeEnumType,longlSize,_variant_t&vtValue){ASSERT(lpcsrName!
=NULL);try{_ParameterPtrParameter=m_ptrCommand->CreateParameter(lpcsrName,Type,Direction,lSize,vtValue);m_ptrCommand->Parameters->Append(Parameter);}catch(_com_error&comError){RecordErrorMsg(comError);}}voidCDBAdo:
:
SetSPName(LPCTSTRlpcsrSPName){try{m_ptrCommand->CommandText=lpcsrSPName;}catch(_com_error&comError){RecordErrorMsg(comError);}}boolCDBAdo:
:
ExecuteCommand(boolbIsRecordset){try{//关闭记录集CloseRecordset();//执行命令if(bIsRecordset){m_ptrRecordset->PutRefSource(m_ptrCommand);m_ptrRecordset->CursorLocation=adUseClient;DetectResult(m_ptrRecordset->Open((IDispatch*)m_ptrCommand,vtMissing,adOpenForwardOnly,adLockReadOnly,adOptionUnspecified));}else{m_ptrConnection->CursorLocation=adUseClient;DetectResult(m_ptrCommand->Execute(NULL,NULL,adExecuteNoRecords));}returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
Execute(LPCTSTRlpcsrCommand){try{m_ptrConnection->CursorLocation=adUseClient;m_ptrConnection->Execute(lpcsrCommand,NULL,adExecuteNoRecords);returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}longCDBAdo:
:
GetReturnValue(){try{_ParameterPtrptrParam;longlParameterCount=m_ptrCommand->Parameters->Count;for(longi=0;i<lParameterCount;i++){ptrParam=m_ptrCommand->Parameters->Item[i];if(ptrParam->Direction==adParamReturnValue)returnptrParam->Value.lVal;}}catch(_com_error&comError){RecordErrorMsg(comError);}return0;}boolCDBAdo:
:
GetFieldValue(LPCTSTRlpcsrFieldName,WORD&wValue){wValue=0L;try{_variant_tvtFld=m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;if((vtFld.vt!
=VT_NULL)&&(vtFld.vt!
=VT_EMPTY))wValue=(WORD)vtFld.ulVal;returntrue;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
GetFieldValue(LPCTSTRlpcsrFieldName,CString&strValue){try{_variant_tvtFld=m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;if(vtFld.vt==VT_BSTR){strValue=(char*)_bstr_t(vtFld);strValue.TrimLeft();returntrue;}returnfalse;}catch(_com_error&comError){RecordErrorMsg(comError);}returnfalse;}boolCDBAdo:
:
GetFieldValue(LPCTSTRlpcsrFieldName,INT&nValue){nValue=0;try{_variant_tvtFld=m_ptrRec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ado 方式 操作 数据库