MFC 连接Oracle 数据库

时间:2022-07-07 13:10:31

      参考:点击打开链接


  _ConnectionPtr pConnection = NULL;

        pConnection.CreateInstance(_uuidof(Connection));

        pConnection->Mode = adModeUnknown;
        pConnection->ConnectionTimeout = 5;
        pConnection->CommandTimeout = 5;


        HRESULT hr = pConnection->Open("Provider=OraOLEDB.Oracle;Persist Security Info=True;User ID=sys;DataSource=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.5.49)(PORT = 1521)) )(CONNECT_DATA = (SID =huaneng)))\"", "test", "huangjiapeng",NULL);



        if (SUCCEEDED(hr))
        {
            AfxMessageBox("连接数据库成功!");
        }


        
        //查询数据库
        //执行命令
        _RecordsetPtr pRecordset = NULL;
        pRecordset.CreateInstance(_uuidof(Recordset));

        hr = pRecordset->Open(_T("select * from person"), pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic, adCmdText);

        if(SUCCEEDED(hr))
        {
            AfxMessageBox("查询成功");
        }
        else if(FAILED(hr))
        {
            AfxMessageBox("查询失败");
        }


        try
        {
            // 写入各字段值
            CString m_Name = "hello";
            CString m_Age = "98";
            pRecordset->AddNew();
            pRecordset->PutCollect("NAME", _variant_t(m_Name));
            pRecordset->PutCollect("AGE", atol(m_Age));
            pRecordset->Update();
            AfxMessageBox("插入成功!");

            //pRecordset->MoveFirst();
        }
        catch (_com_error *e)
        {
            AfxMessageBox(e->ErrorMessage());
        }


        try
        {
            // 假设删除第二条记录
            pRecordset->MoveFirst();
            pRecordset->Move(1);       // 从0开始
            pRecordset->Delete(adAffectCurrent); // 参数adAffectCurrent为删除当前记录
            pRecordset->Update();
            AfxMessageBox("删除成功!");
        }
        catch (_com_error *e)
        {
            AfxMessageBox("异常发生!");
            AfxMessageBox(e->ErrorMessage());
        }
        
        //遍历结果集

        pRecordset->MoveFirst();
        while(!pRecordset->adoEOF)
        {
            _variant_t var = pRecordset->Fields->GetItem("AGE")->Value;//username
            //结果有待处理
            AfxMessageBox((_bstr_t)var);
            pRecordset->MoveNext();
        }


        //关闭查询器
        if(pRecordset->State)
        {
            pRecordset->Close();
            pRecordset = NULL;
        }
        

        //关闭数据库连接
        if(pConnection->State) MFC 连接Oracle 数据库
        {
            pConnection->Close();
            pConnection = NULL;
        }

        AfxMessageBox("添加成功");

    }
    catch(_com_error &e)
    {
        AfxMessageBox(e.ErrorMessage());

    }