- 浏览: 40191 次
- 性别:
- 来自: 大连
最新评论
连接ACCESS为例:
//头文件 #pragma once #include "math.h" #import "MSADO15.DLL" rename_namespace("ADOWE") rename("EOF","EndOfFile") using namespace ADOWE; class CDBAdo { public: _CommandPtr m_ptrCommand; //命令对象 _RecordsetPtr m_ptrRecordset; //记录集对象 _ConnectionPtr m_ptrConnection; //数据库对象 CString m_strConnect, //连接字符串 m_strErrorMsg; //错误信息 public: CDBAdo(void); ~CDBAdo(void); void DetectResult(HRESULT hResult); void RecordErrorMsg(_com_error comError); CString GetLastError(){return m_strErrorMsg;} bool CreateInstance(); bool SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword); bool SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword); bool OpenConnection(); bool CloseConnection(); bool IsConnecting(); void ClearAllParameters(); void AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue); void SetSPName(LPCTSTR lpcsrSPName); bool ExecuteCommand(bool bIsRecordset); bool Execute(LPCTSTR lpcsrCommand); long GetReturnValue(); bool OpenRecordset(char* szSQL); bool CloseRecordset(); bool IsRecordsetOpened(); bool IsEndRecordset(); void MoveToNext(); void MoveToFirst(); void MoveToLast(); long GetRecordCount(); bool GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time); bool GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue); }; #pragma once #include "math.h" #import "MSADO15.DLL" rename_namespace("ADOWE") rename("EOF","EndOfFile") using namespace ADOWE; class CDBAdo { public: _CommandPtr m_ptrCommand; //命令对象 _RecordsetPtr m_ptrRecordset; //记录集对象 _ConnectionPtr m_ptrConnection; //数据库对象 CString m_strConnect, //连接字符串 m_strErrorMsg; //错误信息 public: CDBAdo(void); ~CDBAdo(void); void DetectResult(HRESULT hResult); void RecordErrorMsg(_com_error comError); CString GetLastError(){return m_strErrorMsg;} bool CreateInstance(); bool SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword); bool SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword); bool OpenConnection(); bool CloseConnection(); bool IsConnecting(); void ClearAllParameters(); void AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue); void SetSPName(LPCTSTR lpcsrSPName); bool ExecuteCommand(bool bIsRecordset); bool Execute(LPCTSTR lpcsrCommand); long GetReturnValue(); bool OpenRecordset(char* szSQL); bool CloseRecordset(); bool IsRecordsetOpened(); bool IsEndRecordset(); void MoveToNext(); void MoveToFirst(); void MoveToLast(); long GetRecordCount(); bool GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time); bool GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue); }; //实现文件 [cpp] view plaincopyprint?#include "StdAfx.h" #include "DBAdo.h" CDBAdo::CDBAdo(void) { m_strConnect = _T(""); m_strErrorMsg = _T(""); //初始化 COM CoInitialize(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(); } bool CDBAdo::CreateInstance() { //创建对象 m_ptrCommand.CreateInstance(__uuidof(Command)); m_ptrRecordset.CreateInstance(__uuidof(Recordset)); m_ptrConnection.CreateInstance(__uuidof(Connection)); if(m_ptrCommand==NULL) { m_strErrorMsg = _T("数据库命令对象创建失败"); return false; } if(m_ptrRecordset==NULL) { m_strErrorMsg = _T("数据库记录集对象创建失败"); return false; } if(m_ptrConnection==NULL) { m_strErrorMsg = _T("数据库连接对象创建失败"); return false; } //设置变量 m_ptrCommand->CommandType = adCmdStoredProc; return true; } void CDBAdo::DetectResult(HRESULT hResult) { if(FAILED(hResult)) _com_issue_error(hResult); } void CDBAdo::RecordErrorMsg(_com_error comError) { _bstr_t bstrDescribe(comError.Description()); m_strErrorMsg.Format(TEXT("ADO 错误:0x%8x,%s"), comError.Error(), (LPCTSTR)bstrDescribe); } bool CDBAdo::SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword) { CString strProvider, strPWD, strUID, strData, strDataSrc; strProvider.Format(_T("Provider=%s;"), strProvider); strPWD.Format(_T("Password=%s;"), strPassword); strUID.Format(_T("User ID=%s;"), strUserID); strData.Format(_T("Initial Catalog=%s;"), strCatalog); strDataSrc.Format(_T("Data Source=%s,%ld;"), strIP, wPort); //构造连接字符串 m_strConnect = strProvider+strPWD+_T("Persist Security Info=True;")+strUID+strData+strDataSrc; return true; } bool CDBAdo::SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword) { CString strProvider, strDataSource, strPWD; strProvider.Format(_T("Provider=%s;"), strDriver); strDataSource.Format(_T("Data Source=%s;"), strDataSrc); strPWD.Format(_T("Jet OLEDB:DataBase Password=%s;"), strPassword); //构造连接字符串 m_strConnect = strProvider+_T("User ID=Admin;")+strDataSource+strPWD; return true; } bool CDBAdo::OpenConnection() { try { //关闭连接 CloseConnection(); //连接数据库 DetectResult(m_ptrConnection->Open(_bstr_t(m_strConnect), "", "", adModeUnknown)); m_ptrConnection->CursorLocation = adUseClient; m_ptrCommand->ActiveConnection = m_ptrConnection; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::CloseConnection() { try { CloseRecordset(); if((m_ptrConnection!=NULL)&&(m_ptrConnection->GetState()!=adStateClosed)) DetectResult(m_ptrConnection->Close()); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::IsConnecting() { try { //状态判断 if(m_ptrConnection==NULL) return false; if(m_ptrConnection->GetState()==adStateClosed) return false; //参数判断 long lErrorCount = m_ptrConnection->Errors->Count; if(lErrorCount>0L) { ErrorPtr pError = NULL; for(long i=0; i<lErrorCount; i++) { pError = m_ptrConnection->Errors->GetItem(i); if(pError->Number==0x80004005) return false; } } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::OpenRecordset(char* szSQL) { try { //关闭记录集 CloseRecordset(); m_ptrRecordset->Open(szSQL, m_ptrConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::CloseRecordset() { try { if(IsRecordsetOpened()) DetectResult(m_ptrRecordset->Close()); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::IsRecordsetOpened() { if(m_ptrRecordset==NULL) return false; if(m_ptrRecordset->GetState()==adStateClosed) return false; return true; } bool CDBAdo::IsEndRecordset() { try { return (m_ptrRecordset->EndOfFile==VARIANT_TRUE); } catch(_com_error& comError) { RecordErrorMsg(comError); } return true; } void CDBAdo::MoveToNext() { try { m_ptrRecordset->MoveNext(); } catch(_com_error& comError) { RecordErrorMsg(comError); } } void CDBAdo::MoveToFirst() { try { m_ptrRecordset->MoveFirst(); } catch(_com_error& comError) { RecordErrorMsg(comError); } } void CDBAdo::MoveToLast() { try { m_ptrRecordset->MoveLast(); } catch(_com_error& comError) { RecordErrorMsg(comError); } } long CDBAdo::GetRecordCount() { try { if(m_ptrRecordset==NULL) return 0; return m_ptrRecordset->GetRecordCount(); } catch(_com_error& comError) { RecordErrorMsg(comError); } return 0; } void CDBAdo::ClearAllParameters() { try { long lParamCount = m_ptrCommand->Parameters->Count; if(lParamCount>0L) { for(long i=lParamCount; i>0; i--) { _variant_t vtIndex; vtIndex.intVal = i-1; m_ptrCommand->Parameters->Delete(vtIndex); } } } catch(_com_error& comError) { RecordErrorMsg(comError); } } void CDBAdo::AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue) { ASSERT(lpcsrName!=NULL); try { _ParameterPtr Parameter = m_ptrCommand->CreateParameter(lpcsrName, Type, Direction, lSize, vtValue); m_ptrCommand->Parameters->Append(Parameter); } catch(_com_error& comError) { RecordErrorMsg(comError); } } void CDBAdo::SetSPName(LPCTSTR lpcsrSPName) { try { m_ptrCommand->CommandText = lpcsrSPName; } catch(_com_error& comError) { RecordErrorMsg(comError); } } bool CDBAdo::ExecuteCommand(bool bIsRecordset) { 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)); } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::Execute(LPCTSTR lpcsrCommand) { try { m_ptrConnection->CursorLocation = adUseClient; m_ptrConnection->Execute(lpcsrCommand, NULL, adExecuteNoRecords); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } long CDBAdo::GetReturnValue() { try { _ParameterPtr ptrParam; long lParameterCount = m_ptrCommand->Parameters->Count; for(long i=0; i<lParameterCount; i++) { ptrParam = m_ptrCommand->Parameters->Item[i]; if(ptrParam->Direction==adParamReturnValue) return ptrParam->Value.lVal; } } catch(_com_error& comError) { RecordErrorMsg(comError); } return 0; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue) { wValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) wValue = (WORD)vtFld.ulVal; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue) { try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if(vtFld.vt==VT_BSTR) { strValue = (char*)_bstr_t(vtFld); strValue.TrimLeft(); return true; } return false; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue) { nValue = 0; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_BOOL: { nValue = vtFld.boolVal; break; } case VT_I2: case VT_UI1: { nValue = vtFld.iVal; break; } case VT_NULL: case VT_EMPTY: { nValue = 0; break; } default: nValue = vtFld.iVal; } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue) { bValue = 0; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_BOOL: { bValue = (vtFld.boolVal!=0)?1:0; break; } case VT_I2: case VT_UI1: { bValue = (vtFld.iVal>0)?1:0; break; } case VT_NULL: case VT_EMPTY: { bValue = 0; break; } default: bValue = (BYTE)vtFld.iVal; } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue) { ulValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) ulValue = vtFld.lVal; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue) { dbValue=0.0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_R4:dbValue = vtFld.fltVal;break; case VT_R8:dbValue = vtFld.dblVal;break; case VT_DECIMAL: { dbValue = vtFld.decVal.Lo32; dbValue *= (vtFld.decVal.sign==128)?-1:1; dbValue /= pow((float)10,vtFld.decVal.scale); } break; case VT_UI1:dbValue = vtFld.iVal;break; case VT_I2: case VT_I4:dbValue = vtFld.lVal;break; case VT_NULL: case VT_EMPTY:dbValue = 0.0L;break; default:dbValue = vtFld.dblVal; } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue) { lValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) lValue = vtFld.lVal; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue) { dwValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) dwValue = vtFld.ulVal; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue) { llValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) llValue=vtFld.lVal; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time) { try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_DATE: { COleDateTime TempTime(vtFld); Time = TempTime; }break; case VT_EMPTY: case VT_NULL:Time.SetStatus(COleDateTime::null);break; default: return false; } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue) { try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_BOOL:bValue=(vtFld.boolVal==0)?false:true;break; case VT_EMPTY: case VT_NULL:bValue = false;break; default:return false; } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; }
发表评论
-
c++操作符优先级总结
2013-12-03 14:47 747优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有 ... -
Qt状态机实例
2013-12-03 14:01 1049#include <QApplication> ... -
c++数据类型的隐形转换
2013-09-02 09:51 1622(1)隐式转换发生的时机:当传递给操作符或者函数的参数与指定类 ... -
C中的野指针
2013-08-30 16:11 987讨论一 什么是野指针 ... -
STL学习(转)
2012-08-28 15:38 1381STL就是Standard Template Libr ... -
STL详解
2012-08-28 14:33 1682STL概述 STL的一个重要 ... -
c++的三种继承(转)
2012-08-23 18:47 1013http://blog.csdn.net/wang_lime ... -
MFC OpenGL标签云 (转)
2012-08-22 11:21 1218初识标签云是在去年年末,一看到这个应用我就特别感兴趣。还记 ... -
派生类的构造函数(转)
2012-08-20 18:05 926派生类的数据成员由所 ... -
元算符重载时友元函数和成员函数的选择
2012-08-18 20:14 1363一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好 ... -
C++面试题(转)
2012-08-16 17:25 7761.是不是一个父类写了一个virtual 函数,如果子类覆盖它 ... -
8皇后问题c++的递归实现
2012-08-16 16:18 1448最近用C++递归形式实现了8皇后问题,可能效率有点低 #i ... -
c++实现的一些排序算法
2012-08-15 11:37 1336最近用c++简单实现了一些排序算法,记下来,以便以后用到 ... -
mfc 常用控件使用方法及常见数据类型转换
2012-04-18 20:31 2000最近做了几个mfc小程序,想把我们经常用到而又经常忘记的的小知 ...
相关推荐
给出了MFC使用ADO读写Access数据库实例 ,包括具体实现思路,和相关的实现代码
MFC使用ADO读写Access数据库实例-免费
MFC用ADO读写Access数据库实例
MFC ado mysql连接数据库实例里面有连接数据库,查询等操作
mfc ado连接sqlserver2005数据库的实例,以及自己编代码时的一些体会
在MFC中创建DataAdo项目对话框,在资源视图上加上一个list control控件,变量名m_list,Styles View设为Report。在项目DataAdo文件下创建db1的ACESS数据库,表名为表1,字段名称姓名、性别。 1、在stdafx.h头文件...
mfc ado 数据库实例 mfc /vc6.0ado连接数据库的实例例程
MFC程序设计详细实例 第21章 ADO数据库编程MFC程序设计详细实例 第21章 ADO数据库编程MFC程序设计详细实例 第21章 ADO数据库编程MFC程序设计详细实例 第21章 ADO数据库编程MFC程序设计详细实例 第21章 ADO数据库编程...
MFC中用ADO与Access连接实例,实现数据更新,添加,删除等操作
利用ADO查询并操作数据库实例。源代码 vc++mfc编程案例
ADO方式连接sql数据库超详细实例 这就是个实例啊! 很详细的,很有针对性的!
MFC下使用ADO连接数据库的数据库访问技术的实例教程,以一个稍微比较复杂的实例来了解访问的流程等。。。需要耐心的研究一下哦。。
这资源专门针对菜鸟,自己也曾在网上实例很乱,在花费了很多时间精力的情况下找到了不错的资源,该资源只要是将数据库的增删查改资源分解;在此与大家分享,对于菜鸟而言很难一步步实现增删查改功能;
这款教程非常适合菜鸟入门,全网最优!欢迎各位下载学习。
VS2013 MFC连接Access数据库(ADO)详细版实例操作(含Combo Box读取数据库内容)
MFC使用ADO读写Access数据库实例 很好使用的。
VC封装ADO访问数据库的代码实例。可以直接运行,支持MFC技术。
C++通过ADO连接SQL server数据库的MFC实例,欢迎大家参考!修改连接符可以连接MySQL数据库
ADO数据库编程\Chapter21 ADO数据库编程实例源码 ADO数据库编程\Chapter21_Toolbar.bmp 工具栏位图1 ADO数据库编程\Chapter21_tree.bmp 树视图图像列表 ADO数据库编程\Toolbar_Chapter21.bmp 工具栏位图2 ...