zoukankan      html  css  js  c++  java
  • c++访问数据库方法

    C++连接数据库的方法:

            前段时间写程序,需要用到C++连接访问数据库,询问了好多同学都是模棱两可。所以只好自己去琢磨:learn by doing. 在这儿写出来,一是为了自己总结,二是大家需要此类时可直接搬过去用,不用再费劲绕弯路了。
             数据库连接有多种方式,通过学习得知有几种方法,但还没时间亲自实验:
     1.使用纯C++实现,通过db-libaray· 
     2.通过托管c++直接使用.netframework
     3.使用OTL类库,简单例子参考:
    http://otl.sourceforge.net/otl4_examples.ziphttp://otl.sourceforge.net/otl3_down.htm
     4.使用Ado,ADO(ActiveX   Data   Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层 ,甚至比以往所接触的ODBC API、DAO、RDO都要容易使用
    ADO使用步骤方法:
     (1)初始化COM库,引入ADO库定义文件
     (2)用Connection对象连接数据库
     (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
     (4)使用完毕后关闭连接释放对象。
    //下面的import语句就是引入ADO库定义文件,有的环境下需要将改为\
    //编译的时候系统会生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
     
    #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
    class ADOConn

        public:
              ::_ConnectionPtr m_pConnection;
              ::_RecordsetPtr m_pRecordset;
        public:
              ADOConn(void);
              //初始化-连接数据库
              void OnInitADOConn();
              //执行查询,返回结果集
              ::_RecordsetPtr & GetRecordSet(_bstr_t bstrSQL);
              //执行sql语句,更新数据库
             bool ExecuteSQL(_bstr_t bstrSQL);
             void ExitConnect();
    };
    void ADOConn::OnInitADOConn()
    {
     ::CoInitialize(NULL);//   初始化OLE/COM库环境   ,为访问ADO接口做准备
     //AfxOleInit();//used in MFC
     HRESULT hr;
     try
     {
      
      hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
      //_bstr_t strConnect="driver=sql server;server=(local);Provide=SQLOLEDB;Data Source=SHL;Initial Catalog=CutwordSet;User ID=;Password=;";
      _bstr_t strConnect="driver={sql server};server=(local);uid=;pwd=;database=CutwordSet";
      hr = m_pConnection->Open( strConnect,"", "", adModeUnknown);
      if(SUCCEEDED(hr))
       cout<<endl;
       //cout<<"连接数据库sucess"<<endl;
     
     }
     catch(_com_error e)///捕捉异常
     {
      //CString errormessage;
      //errormessage.Format("连接数据库失败! 错误信息:%s",e.ErrorMessage());
      //AfxMessageBox(errormessage);///显示错误信息
      cout<<"连接数据库失败! 错误信息:"<<e.Description()<<endl;
      
      
     }
    }
    _RecordsetPtr & ADOConn::GetRecordSet(_bstr_t bstrSQL)
    {
     try
     {
      //连接数据库,如果connection对象为空,则重新连接数据库
      if(m_pConnection==NULL)
       OnInitADOConn();
      //创建记录集对象
      m_pRecordset.CreateInstance(_uuidof(Recordset));
      m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
     }
     catch(_com_error e)
     {
      
      cout<<e.Description()<<endl;
      
     }
     //返回记录集
     return m_pRecordset;
    }
    bool ADOConn::ExecuteSQL(_bstr_t bstrSQL)
    {
     try
     {
      //是否已经连接数据库
      if(m_pConnection ==NULL)
       OnInitADOConn();
      m_pConnection->Execute(bstrSQL,NULL,adCmdText);
      return true;
     }
     catch(_com_error e)
     {
        //AfxMessageBox(e.Description());
      cout<<e.Description()<<endl;
      return false;
     }
    }
    void ADOConn::ExitConnect()
    {
     //关闭记录集和连接
     if(m_pRecordset !=NULL)
      m_pRecordset->Close();
     m_pConnection->Close();
     //释放环境
     ::CoUninitialize();//关闭ole/com库,释放资源
    }
  • 相关阅读:
    UVA
    BZOJ 2330: [SCOI2011]糖果
    人类的殒落与扬升
    算法笔记2
    算法笔记
    回溯法
    贪心法
    动态规划
    分治与递归
    计算机图形学 补 光线跟踪
  • 原文地址:https://www.cnblogs.com/inory/p/5468684.html
Copyright © 2011-2022 走看看