分享

ado方式操作数据库类

 紫殿 2012-01-18

VC/MFC数据库新任版主zyq5945(竹叶青)在数据库版开设帖子整理的一些ADO数据库入门与例子,为了表示支持我在其中回复了一个自己平时用的ado操作数据库的类。怎奈论坛对回帖字数有限制,结果只贴了头文件......不过竹叶青版主邀请我把这个类整理到博客里以便分享,我觉得这个办法不错。不过既然要整理到博客里就应该更正式一些,所以花些时间规范了一下这个类,并且制作了一个简单的使用范例,也算是对竹版的支持,对数据库版的一点小小的贡献吧。

      好久没写博客了,其实应该多说两句介绍一下这个类和其简单的使用。不过自己在数据库方面确实知之甚少,这个类其实也是抄来的,只不过在自己的使用过程中“本土化”了一下,呵呵。所以就不班门弄斧了,直接上代码吧,希望能对有志于涉足于数据库应用技术的同僚们有所帮助,按竹版的话说算是“入门实例”吧。

使用范例

本例中操作的数据库为ACCESS2003,操作方式为本地连接,数据库带密码

 

类实现代码

头文件

  1. #pragma once  
  2.   
  3. #include "math.h"  
  4.   
  5. #import "MSADO15.DLL"   rename_namespace("ADOWE") rename("EOF","EndOfFile")  
  6. using namespace ADOWE;  
  7.   
  8. class CDBAdo  
  9. {  
  10. public:  
  11.     _CommandPtr     m_ptrCommand;       //命令对象  
  12.     _RecordsetPtr   m_ptrRecordset;     //记录集对象  
  13.     _ConnectionPtr  m_ptrConnection;    //数据库对象  
  14.   
  15.     CString         m_strConnect,       //连接字符串  
  16.                     m_strErrorMsg;      //错误信息  
  17.   
  18. public:  
  19.     CDBAdo(void);  
  20.     ~CDBAdo(void);  
  21.   
  22.     void    DetectResult(HRESULT hResult);  
  23.     void    RecordErrorMsg(_com_error comError);  
  24.     CString GetLastError(){return m_strErrorMsg;}  
  25.   
  26.     bool    CreateInstance();  
  27.     bool    SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword);  
  28.     bool    SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword);  
  29.     bool    OpenConnection();  
  30.     bool    CloseConnection();  
  31.     bool    IsConnecting();  
  32.   
  33.     void    ClearAllParameters();  
  34.     void    AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue);  
  35.     void    SetSPName(LPCTSTR lpcsrSPName);  
  36.     bool    ExecuteCommand(bool bIsRecordset);  
  37.     bool    Execute(LPCTSTR lpcsrCommand);  
  38.     long    GetReturnValue();  
  39.   
  40.     bool    OpenRecordset(char* szSQL);  
  41.     bool    CloseRecordset();  
  42.     bool    IsRecordsetOpened();  
  43.     bool    IsEndRecordset();  
  44.     void    MoveToNext();  
  45.     void    MoveToFirst();  
  46.     void    MoveToLast();  
  47.     long    GetRecordCount();  
  48.   
  49.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue);  
  50.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue);  
  51.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue);  
  52.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue);  
  53.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue);  
  54.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue);  
  55.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue);  
  56.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue);  
  57.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue);  
  58.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time);  
  59.     bool    GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue);  
  60. };  

实现文件

  1. #include "StdAfx.h"  
  2. #include "DBAdo.h"  
  3.   
  4. CDBAdo::CDBAdo(void)  
  5. {  
  6.     m_strConnect    = _T("");  
  7.     m_strErrorMsg   = _T("");  
  8.   
  9.     //初始化 COM  
  10.     CoInitialize(NULL);  
  11. }  
  12.   
  13. CDBAdo::~CDBAdo(void)  
  14. {  
  15.     //关闭连接  
  16.     CloseConnection();  
  17.   
  18.     //释放对象  
  19.     if(m_ptrCommand!=NULL)  
  20.         m_ptrCommand.Release();  
  21.     if(m_ptrRecordset!=NULL)  
  22.         m_ptrRecordset.Release();  
  23.     if(m_ptrConnection!=NULL)  
  24.         m_ptrConnection.Release();  
  25. }  
  26.   
  27. bool CDBAdo::CreateInstance()  
  28. {  
  29.     //创建对象  
  30.     m_ptrCommand.CreateInstance(__uuidof(Command));  
  31.     m_ptrRecordset.CreateInstance(__uuidof(Recordset));  
  32.     m_ptrConnection.CreateInstance(__uuidof(Connection));  
  33.   
  34.     if(m_ptrCommand==NULL)  
  35.     {  
  36.         m_strErrorMsg   = _T("数据库命令对象创建失败");  
  37.         return  false;  
  38.     }  
  39.     if(m_ptrRecordset==NULL)  
  40.     {  
  41.         m_strErrorMsg   = _T("数据库记录集对象创建失败");  
  42.         return  false;  
  43.     }  
  44.     if(m_ptrConnection==NULL)  
  45.     {  
  46.         m_strErrorMsg   = _T("数据库连接对象创建失败");  
  47.         return  false;  
  48.     }  
  49.   
  50.     //设置变量  
  51.     m_ptrCommand->CommandType    = adCmdStoredProc;  
  52.     return  true;  
  53. }  
  54.   
  55. void CDBAdo::DetectResult(HRESULT hResult)  
  56. {  
  57.     if(FAILED(hResult))  
  58.         _com_issue_error(hResult);  
  59. }  
  60.   
  61. void CDBAdo::RecordErrorMsg(_com_error comError)  
  62. {  
  63.     _bstr_t bstrDescribe(comError.Description());  
  64.   
  65.     m_strErrorMsg.Format(TEXT("ADO 错误:0x%8x,%s"), comError.Error(), (LPCTSTR)bstrDescribe);  
  66. }  
  67.   
  68. bool CDBAdo::SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword)  
  69. {  
  70.     CString strProvider, strPWD, strUID, strData, strDataSrc;  
  71.   
  72.     strProvider.Format(_T("Provider=%s;"), strProvider);  
  73.     strPWD.Format(_T("Password=%s;"), strPassword);  
  74.     strUID.Format(_T("User ID=%s;"), strUserID);  
  75.     strData.Format(_T("Initial Catalog=%s;"), strCatalog);  
  76.     strDataSrc.Format(_T("Data Source=%s,%ld;"), strIP, wPort);  
  77.   
  78.     //构造连接字符串  
  79.     m_strConnect    = strProvider+strPWD+_T("Persist Security Info=True;")+strUID+strData+strDataSrc;  
  80.   
  81.     return true;  
  82. }  
  83.   
  84. bool CDBAdo::SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword)  
  85. {  
  86.     CString strProvider, strDataSource, strPWD;  
  87.   
  88.     strProvider.Format(_T("Provider=%s;"), strDriver);  
  89.     strDataSource.Format(_T("Data Source=%s;"), strDataSrc);  
  90.     strPWD.Format(_T("Jet OLEDB:DataBase Password=%s;"), strPassword);  
  91.   
  92.     //构造连接字符串  
  93.     m_strConnect    = strProvider+_T("User ID=Admin;")+strDataSource+strPWD;  
  94.   
  95.     return true;  
  96. }  
  97.   
  98. bool CDBAdo::OpenConnection()  
  99. {  
  100.     try  
  101.     {  
  102.         //关闭连接  
  103.         CloseConnection();  
  104.   
  105.         //连接数据库  
  106.         DetectResult(m_ptrConnection->Open(_bstr_t(m_strConnect), """", adModeUnknown));  
  107.         m_ptrConnection->CursorLocation  = adUseClient;  
  108.         m_ptrCommand->ActiveConnection   = m_ptrConnection;  
  109.   
  110.         return true;  
  111.     }  
  112.     catch(_com_error& comError)   
  113.     {  
  114.         RecordErrorMsg(comError);  
  115.     }  
  116.   
  117.     return false;  
  118. }  
  119.   
  120. bool CDBAdo::CloseConnection()  
  121. {  
  122.     try  
  123.     {  
  124.         CloseRecordset();  
  125.         if((m_ptrConnection!=NULL)&&(m_ptrConnection->GetState()!=adStateClosed))  
  126.             DetectResult(m_ptrConnection->Close());  
  127.   
  128.         return true;  
  129.     }  
  130.     catch(_com_error& comError)  
  131.     {  
  132.         RecordErrorMsg(comError);  
  133.     }  
  134.   
  135.     return false;  
  136. }  
  137.   
  138. bool CDBAdo::IsConnecting()  
  139. {  
  140.     try   
  141.     {  
  142.         //状态判断  
  143.         if(m_ptrConnection==NULL)  
  144.             return  false;  
  145.         if(m_ptrConnection->GetState()==adStateClosed)  
  146.             return  false;  
  147.   
  148.         //参数判断  
  149.         long    lErrorCount = m_ptrConnection->Errors->Count;  
  150.         if(lErrorCount>0L)  
  151.         {  
  152.             ErrorPtr    pError   = NULL;  
  153.             for(long i=0; i<lErrorCount; i++)  
  154.             {  
  155.                 pError  = m_ptrConnection->Errors->GetItem(i);  
  156.                 if(pError->Number==0x80004005)  
  157.                     return  false;  
  158.             }  
  159.         }  
  160.   
  161.         return true;  
  162.     }  
  163.     catch(_com_error& comError)  
  164.     {  
  165.         RecordErrorMsg(comError);  
  166.     }  
  167.   
  168.     return false;  
  169. }  
  170.   
  171. bool CDBAdo::OpenRecordset(char* szSQL)  
  172. {  
  173.     try  
  174.     {  
  175.         //关闭记录集  
  176.         CloseRecordset();  
  177.   
  178.         m_ptrRecordset->Open(szSQL, m_ptrConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);  
  179.   
  180.         return true;  
  181.     }  
  182.     catch(_com_error& comError)  
  183.     {  
  184.         RecordErrorMsg(comError);  
  185.     }  
  186.   
  187.     return  false;  
  188. }  
  189.   
  190. bool CDBAdo::CloseRecordset()  
  191. {  
  192.     try  
  193.     {  
  194.         if(IsRecordsetOpened())  
  195.             DetectResult(m_ptrRecordset->Close());  
  196.         return true;  
  197.     }  
  198.     catch(_com_error& comError)  
  199.     {  
  200.         RecordErrorMsg(comError);  
  201.     }  
  202.   
  203.     return false;  
  204. }  
  205.   
  206. bool CDBAdo::IsRecordsetOpened()  
  207. {  
  208.     if(m_ptrRecordset==NULL)  
  209.         return  false;  
  210.     if(m_ptrRecordset->GetState()==adStateClosed)  
  211.         return  false;  
  212.   
  213.     return true;  
  214. }  
  215.   
  216. bool CDBAdo::IsEndRecordset()  
  217. {  
  218.     try   
  219.     {  
  220.         return (m_ptrRecordset->EndOfFile==VARIANT_TRUE);  
  221.     }  
  222.     catch(_com_error& comError)  
  223.     {  
  224.         RecordErrorMsg(comError);  
  225.     }  
  226.   
  227.     return true;  
  228. }  
  229.   
  230. void CDBAdo::MoveToNext()  
  231. {  
  232.     try   
  233.     {   
  234.         m_ptrRecordset->MoveNext();   
  235.     }  
  236.     catch(_com_error& comError)  
  237.     {  
  238.         RecordErrorMsg(comError);  
  239.     }  
  240. }  
  241.   
  242. void CDBAdo::MoveToFirst()  
  243. {  
  244.     try   
  245.     {   
  246.         m_ptrRecordset->MoveFirst();   
  247.     }  
  248.     catch(_com_error& comError)  
  249.     {  
  250.         RecordErrorMsg(comError);  
  251.     }  
  252. }  
  253.   
  254. void CDBAdo::MoveToLast()  
  255. {  
  256.     try   
  257.     {   
  258.         m_ptrRecordset->MoveLast();   
  259.     }  
  260.     catch(_com_error& comError)  
  261.     {  
  262.         RecordErrorMsg(comError);  
  263.     }  
  264. }  
  265.   
  266. long CDBAdo::GetRecordCount()  
  267. {  
  268.     try  
  269.     {  
  270.         if(m_ptrRecordset==NULL)  
  271.             return  0;  
  272.         return  m_ptrRecordset->GetRecordCount();  
  273.     }  
  274.     catch(_com_error& comError)  
  275.     {  
  276.         RecordErrorMsg(comError);  
  277.     }  
  278.   
  279.     return 0;  
  280. }  
  281.   
  282. void CDBAdo::ClearAllParameters()  
  283. {  
  284.     try   
  285.     {  
  286.         long    lParamCount = m_ptrCommand->Parameters->Count;  
  287.         if(lParamCount>0L)  
  288.         {  
  289.             for(long i=lParamCount; i>0; i--)  
  290.             {  
  291.                 _variant_t  vtIndex;  
  292.   
  293.                 vtIndex.intVal  = i-1;  
  294.                 m_ptrCommand->Parameters->Delete(vtIndex);  
  295.             }  
  296.         }  
  297.     }  
  298.     catch(_com_error& comError)  
  299.     {  
  300.         RecordErrorMsg(comError);  
  301.     }  
  302. }  
  303.   
  304. void CDBAdo::AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue)  
  305. {  
  306.     ASSERT(lpcsrName!=NULL);  
  307.     try   
  308.     {  
  309.         _ParameterPtr   Parameter   = m_ptrCommand->CreateParameter(lpcsrName, Type, Direction, lSize, vtValue);  
  310.         m_ptrCommand->Parameters->Append(Parameter);  
  311.     }  
  312.     catch(_com_error& comError)  
  313.     {  
  314.         RecordErrorMsg(comError);  
  315.     }  
  316. }  
  317.   
  318. void CDBAdo::SetSPName(LPCTSTR lpcsrSPName)  
  319. {  
  320.     try   
  321.     {   
  322.         m_ptrCommand->CommandText    = lpcsrSPName;   
  323.     }  
  324.     catch(_com_error& comError)  
  325.     {  
  326.         RecordErrorMsg(comError);  
  327.     }  
  328. }  
  329.   
  330. bool CDBAdo::ExecuteCommand(bool bIsRecordset)  
  331. {  
  332.     try   
  333.     {  
  334.         //关闭记录集  
  335.         CloseRecordset();  
  336.         //执行命令  
  337.         if(bIsRecordset)  
  338.         {  
  339.             m_ptrRecordset->PutRefSource(m_ptrCommand);  
  340.             m_ptrRecordset->CursorLocation   = adUseClient;  
  341.             DetectResult(m_ptrRecordset->Open((IDispatch*)m_ptrCommand, vtMissing, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified));  
  342.         }else   
  343.         {  
  344.             m_ptrConnection->CursorLocation  = adUseClient;  
  345.             DetectResult(m_ptrCommand->Execute(NULL, NULL, adExecuteNoRecords));  
  346.         }  
  347.         return  true;  
  348.     }  
  349.     catch(_com_error& comError)  
  350.     {  
  351.         RecordErrorMsg(comError);  
  352.     }  
  353.   
  354.     return  false;  
  355. }  
  356.   
  357. bool CDBAdo::Execute(LPCTSTR lpcsrCommand)  
  358. {  
  359.     try  
  360.     {  
  361.         m_ptrConnection->CursorLocation  = adUseClient;  
  362.         m_ptrConnection->Execute(lpcsrCommand, NULL, adExecuteNoRecords);  
  363.         return  true;  
  364.     }  
  365.     catch(_com_error& comError)  
  366.     {  
  367.         RecordErrorMsg(comError);  
  368.     }  
  369.   
  370.     return  false;  
  371. }  
  372.   
  373. long CDBAdo::GetReturnValue()  
  374. {  
  375.     try   
  376.     {  
  377.         _ParameterPtr   ptrParam;  
  378.         long            lParameterCount = m_ptrCommand->Parameters->Count;  
  379.         for(long i=0; i<lParameterCount; i++)  
  380.         {  
  381.             ptrParam    = m_ptrCommand->Parameters->Item[i];  
  382.             if(ptrParam->Direction==adParamReturnValue)  
  383.                 return  ptrParam->Value.lVal;  
  384.         }  
  385.     }  
  386.     catch(_com_error& comError)  
  387.     {  
  388.         RecordErrorMsg(comError);  
  389.     }  
  390.   
  391.     return  0;  
  392. }  
  393.   
  394. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue)  
  395. {  
  396.     wValue  = 0L;  
  397.     try  
  398.     {  
  399.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  400.         if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))  
  401.             wValue  = (WORD)vtFld.ulVal;  
  402.   
  403.         return true;  
  404.     }  
  405.     catch(_com_error& comError)  
  406.     {  
  407.         RecordErrorMsg(comError);  
  408.     }  
  409.   
  410.     return false;  
  411. }  
  412.   
  413. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue)  
  414. {  
  415.     try  
  416.     {  
  417.         _variant_t vtFld    = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  418.         if(vtFld.vt==VT_BSTR)  
  419.         {  
  420.             strValue    = (char*)_bstr_t(vtFld);  
  421.             strValue.TrimLeft();  
  422.             return  true;  
  423.         }  
  424.         return  false;  
  425.     }  
  426.     catch(_com_error& comError)  
  427.     {  
  428.         RecordErrorMsg(comError);  
  429.     }  
  430.   
  431.     return  false;  
  432. }  
  433.   
  434. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue)  
  435. {  
  436.     nValue  = 0;  
  437.     try  
  438.     {  
  439.         _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  440.         switch(vtFld.vt)  
  441.         {  
  442.         case VT_BOOL:  
  443.             {  
  444.                 nValue  = vtFld.boolVal;  
  445.                 break;  
  446.             }  
  447.         case VT_I2:  
  448.         case VT_UI1:  
  449.             {  
  450.                 nValue  = vtFld.iVal;  
  451.                 break;  
  452.             }  
  453.         case VT_NULL:  
  454.         case VT_EMPTY:  
  455.             {  
  456.                 nValue  = 0;  
  457.                 break;  
  458.             }  
  459.         default: nValue = vtFld.iVal;  
  460.         }     
  461.         return true;  
  462.     }  
  463.     catch(_com_error& comError)  
  464.     {  
  465.         RecordErrorMsg(comError);  
  466.     }  
  467.   
  468.     return false;  
  469. }  
  470.   
  471. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue)  
  472. {  
  473.     bValue  = 0;  
  474.     try  
  475.     {  
  476.         _variant_t vtFld    = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  477.         switch(vtFld.vt)  
  478.         {  
  479.         case VT_BOOL:  
  480.             {  
  481.                 bValue  = (vtFld.boolVal!=0)?1:0;  
  482.                 break;  
  483.             }  
  484.         case VT_I2:  
  485.         case VT_UI1:  
  486.             {  
  487.                 bValue  = (vtFld.iVal>0)?1:0;  
  488.                 break;  
  489.             }  
  490.         case VT_NULL:  
  491.         case VT_EMPTY:  
  492.             {  
  493.                 bValue  = 0;  
  494.                 break;  
  495.             }  
  496.         default: bValue = (BYTE)vtFld.iVal;  
  497.         }     
  498.         return true;  
  499.     }  
  500.     catch(_com_error& comError)  
  501.     {  
  502.         RecordErrorMsg(comError);  
  503.     }  
  504.   
  505.     return  false;  
  506. }  
  507. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue)  
  508. {  
  509.     ulValue = 0L;  
  510.     try  
  511.     {  
  512.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  513.         if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))  
  514.             ulValue = vtFld.lVal;  
  515.         return  true;  
  516.     }  
  517.     catch(_com_error& comError)  
  518.     {  
  519.         RecordErrorMsg(comError);  
  520.     }  
  521.   
  522.     return  false;  
  523. }  
  524. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue)  
  525. {  
  526.     dbValue=0.0L;  
  527.     try  
  528.     {  
  529.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  530.         switch(vtFld.vt)  
  531.         {  
  532.         case VT_R4:dbValue  = vtFld.fltVal;break;  
  533.         case VT_R8:dbValue  = vtFld.dblVal;break;  
  534.         case VT_DECIMAL:  
  535.             {  
  536.                 dbValue  = vtFld.decVal.Lo32;  
  537.                 dbValue *= (vtFld.decVal.sign==128)?-1:1;  
  538.                 dbValue /= pow((float)10,vtFld.decVal.scale);  
  539.             }  
  540.             break;  
  541.         case VT_UI1:dbValue = vtFld.iVal;break;  
  542.         case VT_I2:  
  543.         case VT_I4:dbValue  = vtFld.lVal;break;  
  544.         case VT_NULL:  
  545.         case VT_EMPTY:dbValue   = 0.0L;break;  
  546.         default:dbValue = vtFld.dblVal;  
  547.         }  
  548.         return true;  
  549.     }  
  550.     catch(_com_error& comError)  
  551.     {  
  552.         RecordErrorMsg(comError);  
  553.     }  
  554.   
  555.     return  false;  
  556. }  
  557. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue)  
  558. {  
  559.     lValue  = 0L;  
  560.     try  
  561.     {  
  562.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  563.         if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))  
  564.             lValue  = vtFld.lVal;  
  565.         return  true;  
  566.     }  
  567.     catch(_com_error& comError)  
  568.     {  
  569.         RecordErrorMsg(comError);  
  570.     }  
  571.   
  572.     return  false;  
  573. }  
  574. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue)  
  575. {  
  576.     dwValue = 0L;  
  577.     try  
  578.     {  
  579.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  580.         if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))  
  581.             dwValue = vtFld.ulVal;  
  582.         return  true;  
  583.     }  
  584.     catch(_com_error& comError)  
  585.     {  
  586.         RecordErrorMsg(comError);  
  587.     }  
  588.   
  589.     return  false;  
  590. }  
  591. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue)  
  592. {  
  593.     llValue = 0L;  
  594.     try  
  595.     {  
  596.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  597.         if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))  
  598.             llValue=vtFld.lVal;  
  599.   
  600.         return  true;  
  601.     }  
  602.     catch(_com_error& comError)  
  603.     {  
  604.         RecordErrorMsg(comError);  
  605.     }  
  606.   
  607.     return  false;  
  608. }  
  609. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time)  
  610. {  
  611.     try  
  612.     {  
  613.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  614.         switch(vtFld.vt)   
  615.         {  
  616.         case VT_DATE:  
  617.             {  
  618.                 COleDateTime    TempTime(vtFld);  
  619.                 Time    = TempTime;  
  620.             }break;  
  621.         case VT_EMPTY:  
  622.         case VT_NULL:Time.SetStatus(COleDateTime::null);break;  
  623.         defaultreturn false;  
  624.         }  
  625.         return  true;  
  626.     }  
  627.     catch(_com_error& comError)  
  628.     {  
  629.         RecordErrorMsg(comError);  
  630.     }  
  631.   
  632.     return  false;  
  633. }  
  634.   
  635. bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue)  
  636. {  
  637.     try  
  638.     {  
  639.         _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;  
  640.         switch(vtFld.vt)   
  641.         {  
  642.         case VT_BOOL:bValue=(vtFld.boolVal==0)?false:true;break;  
  643.         case VT_EMPTY:  
  644.         case VT_NULL:bValue = false;break;  
  645.         default:return false;  
  646.         }  
  647.   
  648.         return  true;  
  649.     }  
  650.     catch(_com_error& comError)  
  651.     {  
  652.         RecordErrorMsg(comError);  
  653.     }  
  654.   
  655.     return  false;  
  656. }  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多