zoukankan      html  css  js  c++  java
  • MFC用ADO方式连接数据库,断线重连的问题,如何恢复数据库链接

    采用的方式是用定时器不断查询数据库连接状态,

    void CSqlDlg::OnTimer(UINT nIDEvent) 
    {
        // TODO: Add your message handler code here and/or call default
        if(nIDEvent==TIMER_SQL)
        {
            //检查SQL
            m_bSql=CMakeSureSql::Check(g_Connection);  //这里的全局的CAdoConnection* 
            if(!m_bSql)
            {
                CMakeSureSql::RetSet(g_Connection,g_strDataPath);
    
                //重新设置数据库连接
           //用新的pConn去给旧的pConn赋值,这步很关键,如果出现重现连接数据库后,打开数据集发生错误,找错时候,应先检查旧的
    
    
               //pConn是否已经无效,新旧的pConn的地址不同,则说明旧的连接已经失效
             } 
    }
    CDialog::OnTimer(nIDEvent);
    }

    这里的Check函数是

    BOOL CMakeSureSql::Check(CAdoConnection*& pConn)
    {
        NULL_RETURNFALSE(pConn);  //这个是宏定义,自己写的,
        BOOL bRet=FALSE;
        CAdoRecordSet    *    pDataSet;
        try{
            
            if (pConn != NULL)
            {
                pDataSet = new CAdoRecordSet;
                pDataSet->SetAdoConnection(pConn);
            }
            if (pDataSet->IsOpen())
            {
                pDataSet->Close();    
            }
            
            CString strSQL="select getdate()";   
            bRet=pDataSet->OpenRecordSet(strSQL)!=ADORES_FAILED;    //通过这个来测试数据库连接是否断掉
        }
        catch(...)
        {
            //DT("CMakeSureSql 测试数据连接的时候发生异常!");
            bRet=FALSE;
        }
        SAFE_DELETE(pDataSet);
        return bRet;
    }
    BOOL CMakeSureSql::RetSet(CAdoConnection*& pConn,CString& strConn)
    {
        if(pConn!=NULL)
        {
            pConn->Disconnect();
            SAFE_DELETE(pConn); 
        }
        pConn = new CAdoConnection;
       
        NULL_RETURNFALSE(pConn);
        BOOL bRes = pConn->Connect(strConn);
        //
        g_DataCenter.ReInit(pConn); 
        if(bRes==FALSE) { SAFE_DELETE(pConn); return FALSE; } return TRUE; 
    }

    这些是程序片段,缺乏相应代码的前提下,并不能运行,用来启发思路用的,

  • 相关阅读:
    删除input上传的文件路径
    Atom的追踪函数插件和自定义语法
    配置虚拟域名,hosts文件起作用
    django--博客系统--后台管理
    django--个人主页建立练习
    django--博客--forms组件-用户注册
    django--之登录表单提交
    django--mysql设置
    django之中间件
    django之cookie与session
  • 原文地址:https://www.cnblogs.com/hpcpp/p/6681439.html
Copyright © 2011-2022 走看看