免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 954 | 回复: 0
打印 上一主题 下一主题

[C++] 重新整理的Ado封装 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-08-12 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-14 15:30 |只看该作者 |倒序浏览
  1. #pragma once
  2. #pragma warning (disable:4146)
  3. #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
  4. class Ado
  5. {
  6.         _RecordsetPtr m_pRst;
  7.         _ConnectionPtr m_pConn;

  8.         CString m_szLastError;
  9. public:
  10.         void Release()
  11.         {
  12.                 m_pConn->Release();
  13.         }
  14.         BOOL GetFieldType(long nIndex, int &nType);
  15.         enum EType { DBT_ACCESS, DBT_SQL, DBT_ORACLE };
  16.         BOOL Connect(EType eType, LPCTSTR szDatabase, LPCTSTR szPass = NULL, LPCTSTR szUser = NULL, LPCTSTR szHost = NULL);//连接函数

  17.         int ExecSQL(LPCTSTR szSQL);
  18.         BOOL Select(LPCTSTR szSQL);

  19.         BOOL IsEOF();
  20.         BOOL MoveNext();
  21.         BOOL MoveFirst();
  22.         BOOL MoveLast();
  23.         BOOL GetFieldValue(LPCTSTR szField, COleDateTime &tValue);
  24.         BOOL GetFieldValue(LPCTSTR szField, double &fValue);
  25.         BOOL GetFieldValue(LPCTSTR szField, CString &sValue);
  26.         BOOL GetFieldValue(LPCTSTR szField, int &iValue);
  27.         int GetFieldMoney(LPCTSTR szField, double &fValue);
  28.         BOOL GetFieldByIndex(long nIndex, COleDateTime &tValue);
  29.         BOOL GetFieldByIndex(long nIndex, double &fValue);
  30.         BOOL GetFieldByIndex(long nIndex, CString &sValue);
  31.         BOOL GetFieldByIndex(long nIndex, int &iValue);
  32.         BOOL GetFieldByIndex(long nIndex, long &lValue);
  33.         BOOL GetFieldByIndex(long nIndex, DWORD &dwValue);
  34.         BOOL GetFieldByIndex(long nIndex, UINT &iValue);
  35.         BOOL GetFieldByIndex(long nIndex, char &cValue);
  36.         BOOL GetFieldByIndex(long nIndex, short &nValue);
  37.         BOOL GetFieldByIndex(long nIndex, BYTE &cbValue);
  38.         BOOL GetFieldByIndex(long nIndex, WORD &wValue);
  39.         BOOL GetFieldByIndex(long nIndex, TCHAR sValue[], int nSize);
  40.         int GetFieldCount();
  41.         BOOL GetFieldName(long nIndex, CString &szName);
  42.         int GetRecordCount();
  43.         CString GetLastError()
  44.         {
  45.                 CString str = m_szLastError;
  46.                 m_szLastError.Empty();
  47.                 return str;
  48.         }
  49.         class CProc
  50.         {
  51.                 CString m_szLastError;
  52.                 _CommandPtr m_pCmd;
  53.         public:
  54.                 LPCTSTR GetLastError() const
  55.                 {
  56.                         return m_szLastError;
  57.                 }
  58.                 int Exec();
  59.                 BOOL Create(_ConnectionPtr &pConn, LPCTSTR szProc);

  60.                 BOOL AddParam(LPCTSTR szVName, long lParam, ParameterDirectionEnum eDir = adParamInput);
  61.                 BOOL AddParam(LPCTSTR szVName, LPCTSTR szParam, ParameterDirectionEnum eDir = adParamInput);

  62.                 BOOL GetValue(LPCTSTR szVName, long &lParam);
  63.                 BOOL GetValue(LPCTSTR szVName, CString &lParam);

  64.                 void Release()
  65.                 {
  66.                         delete this;
  67.                 }
  68.                 CProc()
  69.                 {
  70.                 }

  71.         };
  72.         CProc* CreateProc(LPCTSTR szProc);
  73.         int ExecProc(CProc* pProc);

  74.         Ado();
  75.         virtual ~Ado();
  76. };



  77. #include "stdafx.h"
  78. #include "Ado.h"

  79. Ado::Ado()
  80. {
  81.         ::OleInitialize(NULL);
  82. }

  83. Ado::~Ado()
  84. {

  85. }

  86. BOOL Ado::Connect(EType eType, LPCTSTR szDatabase, LPCTSTR szPass, LPCTSTR szUser, LPCTSTR szHost)
  87. {
  88.         CString str;
  89.         switch (eType)
  90.         {
  91.         case DBT_ACCESS:
  92.         {
  93.                 str.Format(TEXT("Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog=%s"), szDatabase);

  94.         }
  95.         break;
  96.         case DBT_SQL:
  97.         {
  98.                 str = TEXT("Driver=SQL Server;Server=");
  99.                 str += szHost;
  100.                 str += TEXT(";Database=");
  101.                 str += szDatabase;
  102.                 str += TEXT(";UID=");
  103.                 str += szUser;
  104.                 str += TEXT(";PWD=");
  105.                 str += szPass;
  106.         }

  107.         break;
  108.         case DBT_ORACLE:
  109.                 str = TEXT("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=");
  110.                 str += szUser;
  111.                 str += TEXT(";Password=");
  112.                 str += szPass;
  113.                 str += TEXT(";Data Source=");
  114.                 str += szDatabase;
  115.                 break;
  116.         }

  117.         try
  118.         {
  119.                 m_pConn.CreateInstance(__uuidof(Connection));
  120.                 m_pConn->Open(_bstr_t(str), szUser, szPass, adModeUnknown);///连接数据库

  121.         }
  122.         catch (_com_error &e)
  123.         {
  124.                 m_szLastError = (LPCTSTR)e.Description();
  125.                 return FALSE;
  126.         }
  127.         return TRUE;

  128. }


  129. int Ado::ExecSQL(LPCTSTR szSql)
  130. {
  131.         _variant_t vRet;
  132.         try
  133.         {
  134.                 m_pConn->Execute(szSql, &vRet, adCmdText);
  135.         }
  136.         catch (_com_error &e)
  137.         {
  138.                 m_szLastError = (LPCTSTR)e.Description();
  139.                 return e.Error();
  140.         }

  141.         return (long)vRet;
  142. }
  143. BOOL Ado::IsEOF()
  144. {
  145.         try
  146.         {
  147.                 if (m_pRst->GetadoEOF())
  148.                         return TRUE;
  149.         }
  150.         catch (_com_error &e)
  151.         {
  152.                 m_szLastError = (LPCTSTR)e.Description();
  153.         }
  154.         return FALSE;
  155. }


  156. BOOL Ado::Select(LPCTSTR szSQL)
  157. {
  158.         try
  159.         {
  160.                 if (m_pRst)
  161.                         m_pRst->Close();
  162.                 m_pRst.CreateInstance(__uuidof(Recordset));
  163.                 m_pRst->Open(szSQL, m_pConn.GetInterfacePtr(), adOpenStatic, adLockReadOnly, adCmdText);
  164.         }
  165.         catch (_com_error &e)
  166.         {
  167.                 m_szLastError = (LPCTSTR)e.Description();
  168.                 return FALSE;
  169.         }

  170.         return TRUE;
  171. }
  172. int Ado::GetFieldCount()
  173. {
  174.         try
  175.         {
  176.                 return m_pRst->Fields->Count;
  177.         }
  178.         catch (_com_error &e)
  179.         {
  180.                 m_szLastError = (LPCTSTR)e.Description();
  181.                 return FALSE;
  182.         }
  183.         return TRUE;
  184. }

  185. BOOL Ado::GetFieldByIndex(long nIndex, TCHAR sValue[], int nSize)
  186. {
  187.         try
  188.         {
  189.                 _variant_t v = m_pRst->GetCollect(nIndex);
  190.                 if (v.vt == VT_NULL)
  191.                 {
  192.                         *sValue = 0;
  193.                         return TRUE;
  194.                 }
  195.                 CString str = v.bstrVal;
  196.                 LPCTSTR p = str;
  197.                 int i = 0;
  198.                 while (--nSize && (*sValue = *p) != 0)
  199.                 {
  200.                         sValue++;
  201.                         p++;
  202.                 }
  203.                 if (!nSize)
  204.                         *sValue = 0;

  205.         }
  206.         catch (_com_error &e)
  207.         {
  208.                 m_szLastError = (LPCTSTR)e.Description();
  209.                 return FALSE;
  210.         }

  211.         return TRUE;
  212. }
  213. BOOL Ado::GetFieldName(long nIndex, CString &szName)
  214. {
  215.         try
  216.         {
  217.                 szName = (LPCTSTR)m_pRst->Fields->Item[nIndex]->Name;
  218.         }
  219.         catch (_com_error &e)
  220.         {
  221.                 m_szLastError = (LPCTSTR)e.Description();
  222.                 return FALSE;
  223.         }
  224.         return TRUE;
  225. }
  226. BOOL Ado::GetFieldValue(LPCTSTR szField, int &iValue)
  227. {

  228.         try
  229.         {
  230.                 iValue = (long)m_pRst->GetCollect(szField);
  231.         }
  232.         catch (_com_error &e)
  233.         {
  234.                 m_szLastError = (LPCTSTR)e.Description();
  235.                 return FALSE;
  236.         }
  237.         return TRUE;
  238. }

  239. BOOL Ado::GetFieldByIndex(long nIndex, int &iValue)
  240. {
  241.         try
  242.         {
  243.                 _variant_t v = m_pRst->GetCollect(nIndex);
  244.                 iValue = (long)v;
  245.         }
  246.         catch (_com_error &e)
  247.         {
  248.                 m_szLastError = (LPCTSTR)e.Description();
  249.                 return FALSE;
  250.         }
  251.         return TRUE;
  252. }

  253. BOOL Ado::GetFieldByIndex(long nIndex, CString &szValue)
  254. {
  255.         try
  256.         {
  257.                 _variant_t v = m_pRst->GetCollect(nIndex);
  258.                 if (v.vt == VT_NULL)
  259.                         szValue = "";
  260.                 else
  261.                         szValue = v.bstrVal;
  262.         }
  263.         catch (_com_error &e)
  264.         {
  265.                 m_szLastError = (LPCTSTR)e.Description();
  266.                 return FALSE;
  267.         }
  268.         return TRUE;
  269. }

  270. BOOL Ado::GetFieldByIndex(long nIndex, COleDateTime &tValue)
  271. {
  272.         try
  273.         {
  274.                 _variant_t v = m_pRst->GetCollect(nIndex);
  275.                 if (v.vt == VT_NULL)
  276.                         tValue = 0.0;
  277.                 else
  278.                         tValue = v;
  279.                 return TRUE;
  280.         }
  281.         catch (_com_error &e)
  282.         {
  283.                 m_szLastError = (LPCTSTR)e.Description();
  284.                 return FALSE;
  285.         }
  286. }

  287. BOOL Ado::GetFieldByIndex(long nIndex, double &fValue)
  288. {
  289.         try
  290.         {
  291.                 _variant_t v = m_pRst->GetCollect(nIndex);
  292.                 if (v.vt == VT_NULL)
  293.                         fValue = 0.0;
  294.                 else
  295.                         fValue = v;
  296.                 return TRUE;
  297.         }
  298.         catch (_com_error &e)
  299.         {
  300.                 m_szLastError = (LPCTSTR)e.Description();
  301.                 return FALSE;
  302.         }

  303. }

  304. BOOL Ado::GetFieldByIndex(long nIndex, long &lValue)
  305. {
  306.         try
  307.         {
  308.                 _variant_t v = m_pRst->GetCollect(nIndex);
  309.                 if (v.vt == VT_NULL)
  310.                         lValue = 0;
  311.                 else
  312.                         lValue = v;
  313.                 return TRUE;
  314.         }
  315.         catch (_com_error &e)
  316.         {
  317.                 m_szLastError = (LPCTSTR)e.Description();
  318.                 return FALSE;
  319.         }

  320. }

  321. BOOL Ado::GetFieldByIndex(long nIndex, DWORD &dwValue)
  322. {
  323.         try
  324.         {
  325.                 _variant_t v = m_pRst->GetCollect(nIndex);
  326.                 if (v.vt == VT_NULL)
  327.                         dwValue = 0;
  328.                 else
  329.                         dwValue = v.lVal;
  330.                 return TRUE;
  331.         }
  332.         catch (_com_error &e)
  333.         {
  334.                 m_szLastError = (LPCTSTR)e.Description();
  335.                 return FALSE;
  336.         }

  337. }

  338. BOOL Ado::GetFieldByIndex(long nIndex, UINT &iValue)
  339. {
  340.         try
  341.         {
  342.                 _variant_t v = m_pRst->GetCollect(nIndex);
  343.                 if (v.vt == VT_NULL)
  344.                         iValue = 0;
  345.                 else
  346.                         iValue = v.lVal;
  347.                 return TRUE;
  348.         }
  349.         catch (_com_error &e)
  350.         {
  351.                 m_szLastError = (LPCTSTR)e.Description();
  352.                 return FALSE;
  353.         }

  354. }
  355. BOOL Ado::GetFieldByIndex(long nIndex, char &cValue)
  356. {
  357.         try
  358.         {
  359.                 _variant_t v = m_pRst->GetCollect(nIndex);
  360.                 if (v.vt == VT_NULL)
  361.                         cValue = 0;
  362.                 else
  363.                         cValue = v.bVal;
  364.                 return TRUE;
  365.         }
  366.         catch (_com_error &e)
  367.         {
  368.                 m_szLastError = (LPCTSTR)e.Description();
  369.                 return FALSE;
  370.         }

  371. }

  372. BOOL Ado::GetFieldByIndex(long nIndex, short &nValue)
  373. {
  374.         try
  375.         {
  376.                 _variant_t v = m_pRst->GetCollect(nIndex);
  377.                 if (v.vt == VT_NULL)
  378.                         nValue = 0;
  379.                 else
  380.                         nValue = v;
  381.                 return TRUE;
  382.         }
  383.         catch (_com_error &e)
  384.         {
  385.                 m_szLastError = (LPCTSTR)e.Description();
  386.                 return FALSE;
  387.         }

  388. }
  389. BOOL Ado::GetFieldByIndex(long nIndex, BYTE &cbValue)
  390. {
  391.         try
  392.         {
  393.                 _variant_t v = m_pRst->GetCollect(nIndex);
  394.                 if (v.vt == VT_NULL)
  395.                         cbValue = 0;
  396.                 else
  397.                         cbValue = v;
  398.                 return TRUE;
  399.         }
  400.         catch (_com_error &e)
  401.         {
  402.                 m_szLastError = (LPCTSTR)e.Description();
  403.                 return FALSE;
  404.         }
  405. }
  406. BOOL Ado::GetFieldByIndex(long nIndex, WORD &wValue)
  407. {
  408.         try
  409.         {
  410.                 _variant_t v = m_pRst->GetCollect(nIndex);
  411.                 if (v.vt == VT_NULL)
  412.                         wValue = 0;
  413.                 else
  414.                         wValue = v.iVal;
  415.                 return TRUE;
  416.         }
  417.         catch (_com_error &e)
  418.         {
  419.                 m_szLastError = (LPCTSTR)e.Description();
  420.                 return FALSE;
  421.         }

  422. }

  423. BOOL Ado::MoveFirst()
  424. {
  425.         try
  426.         {
  427.                 return m_pRst->MoveFirst() == S_OK;
  428.         }
  429.         catch (_com_error &e)
  430.         {
  431.                 m_szLastError = (LPCTSTR)e.Description();
  432.                 return FALSE;
  433.         }
  434. }
  435. BOOL Ado::MoveLast()
  436. {
  437.         try
  438.         {
  439.                 return m_pRst->MoveLast() == S_OK;
  440.         }
  441.         catch (_com_error &e)
  442.         {
  443.                 m_szLastError = (LPCTSTR)e.Description();
  444.                 return FALSE;
  445.         }
  446. }

  447. BOOL Ado::MoveNext()
  448. {
  449.         try
  450.         {
  451.                 return m_pRst->MoveNext() == S_OK;
  452.         }
  453.         catch (_com_error &e)
  454.         {
  455.                 m_szLastError = (LPCTSTR)e.Description();
  456.                 return FALSE;
  457.         }
  458. }

  459. BOOL Ado::GetFieldType(long nIndex, int &nType)
  460. {
  461.         try
  462.         {
  463.                 nType = m_pRst->Fields->Item[nIndex]->Type;
  464.         }
  465.         catch (_com_error &e)
  466.         {
  467.                 m_szLastError = (LPCTSTR)e.Description();
  468.                 return FALSE;
  469.         }
  470.         return TRUE;

  471. }

  472. BOOL Ado::GetFieldValue(LPCTSTR szField, CString &sValue)
  473. {
  474.         try
  475.         {
  476.                 sValue = m_pRst->GetCollect(szField).bstrVal;
  477.                 return TRUE;
  478.         }
  479.         catch (_com_error &e)
  480.         {
  481.                 m_szLastError = (LPCTSTR)e.Description();
  482.                 return FALSE;
  483.         }


  484. }
  485. BOOL Ado::GetFieldValue(LPCTSTR szField, COleDateTime &tValue)
  486. {
  487.         try
  488.         {
  489.                 tValue = (DATE)m_pRst->GetCollect(szField);
  490.                 return TRUE;
  491.         }
  492.         catch (_com_error &e)
  493.         {
  494.                 m_szLastError = (LPCTSTR)e.Description();
  495.                 return FALSE;
  496.         }
  497. }



  498. int Ado::GetRecordCount()
  499. {
  500.         try
  501.         {
  502.                 return m_pRst->GetRecordCount();
  503.         }
  504.         catch (_com_error &e)
  505.         {
  506.                 m_szLastError = (LPCTSTR)e.Description();
  507.                 return FALSE;
  508.         }
  509. }





  510. BOOL Ado::CProc::Create(_ConnectionPtr &pConn, LPCTSTR szProc)
  511. {
  512.         try
  513.         {
  514.                 m_pCmd.CreateInstance(__uuidof(Command));
  515.                 m_pCmd->ActiveConnection = pConn;
  516.                 m_pCmd->CommandType = adCmdStoredProc;
  517.                 m_pCmd->CommandText = _bstr_t(szProc);
  518.         }
  519.         catch (_com_error &e)
  520.         {
  521.                 m_szLastError = (LPCTSTR)e.Description();
  522.                 return FALSE;
  523.         }
  524.         return TRUE;
  525. }

  526. Ado::CProc* Ado::CreateProc(LPCTSTR szProc)
  527. {
  528.         if (m_pConn == NULL)return FALSE;
  529.         CProc* pProc = new CProc;
  530.         if (pProc->Create(m_pConn, szProc))
  531.                 return pProc;
  532.         delete pProc;
  533.         return NULL;
  534. }

  535. BOOL Ado::CProc::AddParam(LPCTSTR szVName, long lParam, ParameterDirectionEnum eDir)
  536. {
  537.         if (m_pCmd == NULL)
  538.                 return FALSE;
  539.         try
  540.         {
  541.                 _ParameterPtr pParam = m_pCmd->CreateParameter(szVName, adInteger, eDir, sizeof(long), lParam);
  542.                 m_pCmd->Parameters->Append(pParam);
  543.         }
  544.         catch (_com_error &e)
  545.         {
  546.                 m_szLastError = (LPCTSTR)e.Description();
  547.                 return FALSE;
  548.         }

  549.         return TRUE;
  550. }
  551. BOOL Ado::CProc::AddParam(LPCTSTR szVName, LPCTSTR szParam, ParameterDirectionEnum eDir)
  552. {
  553.         if (m_pCmd == NULL)
  554.                 return FALSE;
  555.         try
  556.         {
  557.                 _ParameterPtr pParam = m_pCmd->CreateParameter(_bstr_t(szVName), adVarChar, eDir, lstrlen(szParam) + 2, szParam);
  558.                 m_pCmd->Parameters->Append(pParam);
  559.         }
  560.         catch (_com_error &e)
  561.         {
  562.                 m_szLastError = (LPCTSTR)e.Description();
  563.                 return FALSE;
  564.         }

  565.         return TRUE;
  566. }

  567. int Ado::CProc::Exec()
  568. {
  569.         try
  570.         {
  571.                 m_pCmd->Execute(NULL, NULL, adCmdStoredProc);

  572.         }
  573.         catch (_com_error& e)
  574.         {
  575.                 m_szLastError = (LPCTSTR)e.Description();
  576.                 return e.Error();
  577.         }
  578.         return 0;
  579. }

  580. BOOL Ado::CProc::GetValue(LPCTSTR szVName, long &lParam)
  581. {
  582.         try
  583.         {
  584.                 _variant_t var = m_pCmd->Parameters->GetItem(_bstr_t(szVName))->GetValue();
  585.                 lParam = var;
  586.         }
  587.         catch (_com_error &e)
  588.         {
  589.                 m_szLastError = (LPCTSTR)e.Description();
  590.                 return FALSE;
  591.         }
  592.         return TRUE;
  593. }

  594. BOOL Ado::CProc::GetValue(LPCTSTR szVName, CString &szParam)
  595. {
  596.         try
  597.         {
  598.                 _bstr_t bstr = m_pCmd->Parameters->GetItem(_bstr_t(szVName))->GetValue();
  599.                 szParam = (LPCTSTR)bstr;
  600.         }
  601.         catch (_com_error &e)
  602.         {
  603.                 m_szLastError = (LPCTSTR)e.Description();
  604.                 return FALSE;
  605.         }
  606.         return TRUE;

  607. }

  608. int Ado::ExecProc(CProc* pProc)
  609. {
  610.         return 0;
  611. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP