首个MFC项目 总结2

本文介绍了在MFC项目中使用ADO与Access数据库交互的详细步骤,包括引入msado15.dll,创建DB管理类,连接数据库,执行SQL读取数据以及异常处理。关键操作涉及智能指针和COM对象的使用。
摘要由CSDN通过智能技术生成

 在总结1中 主要讲的各个View与各控件的操作。

项目中也涉及到对数据库的操作:

(1).项目中使用的是ADO来进行对Access数据库的运用。

           由于在MFC的库类中没有可与ADO一起使用的类,因此使用ADO需要通过导入DLL文件来实现。微软提供了通过使用新的#import的C++编译命令,来为ADO中的每个对象创建和使用类。        #import   "msado15.dll"  no_namespace, rename("EOF","adoEOF")       其中我把msado15.dll文件直接放在了工程里。

           首先创个DB类  CDBManage。

           声明个 ADO的Connection对象智能指针:   _ConnectionPtr  m_pConnection;

           在构造函数中:   HRESULT   hr = NOERROR;                  hr是各种warning与 error的data代表    ( HRESULT就是状态码)          

                                          hr = ::CoInitialize(NULL);                        用来告诉 Windows以单线程的方式创建com对象,初始化com库。

                                          m_pConnection = NULL;                      初始化。

 

           与数据库连接的函数: HRESULT hr = NOERROR;

                                                     if(m_pConnection==NULL)
                                                           hr=m_pConnection .CreateInstance(__uuidof(Connection));      给对象智能指针赋值。

                                                     CString strName="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
                                                           CGetDirectory.GetDirectory()+"\\Data\\VRSDBCS.mdb";                得到数据库具体路径

                                                     _bstr_t strConnect=strName;
                                                     if(m_pConnection->GetState() == adStateClosed)                                智能指针的操作
                                                           hr=m_pConnection ->Open(strConnect,"","",adModeUnknown);
                                                     return hr == S_OK;

                     

           读取数据库数据的函数:Excute(CString strSQL,_RecordsetPtr &m_pRecordset)        参数一是数据库操作语句 ,参数二 存放数据库数据。

                                                      _bstr_t bstrSQL=strSQL;

                                                      HRESULT hr=NOERROR;

                                                      hr=m_pRecordset.CreateInstance(__uuidof(Recordset));
                                                      if(m_pConnection->GetState()!=adStateClosed)                            

                                                       {
                                                                    hr=m_pRecordset->Open(bstrSQL,m_pConnection .GetInterfacePtr(),             数据库打开后传入数据
                                                                    adOpenDynamic,adLockOptimistic,adCmdText);
                                                                    return hr==S_OK;
                                                        }
                                                       else
                                                       {
                                                                    MessageBoxA(AfxGetMainWnd()->GetSafeHwnd(),"数据库没有打开,执行SQL失败!",MB_OK|MB_ICONINFORMATION);
                                                                    if(m_pRecordset->GetState()!=adStateClosed)
                                                                    m_pRecordset->Close();
                                                                    return FALSE;
                                                      }

           最后结束数据库操作:if(m_pConnection->GetState() != adStateClosed)
                                                          m_pConnection ->Close();                              调用智能指针关闭。

          以上操作可以放入异常处理中实现。

 

          在操作数据库时,首先创一个以上的数据库对象,调用连接函数和读取函数。再对读取的数据m_pRecordset进行操作, 最后销毁对象。

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值