MFC用ADO方式连接数据库,断线重连的问题,如何恢复数据库链接

Posted 众生皆苦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; 
}

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

以上是关于MFC用ADO方式连接数据库,断线重连的问题,如何恢复数据库链接的主要内容,如果未能解决你的问题,请参考以下文章

关于网页游戏断线重连的思路和demo求助

ActiveMQ的断线重连机制

用netty实现客户端断线重连

java WebSocket客户端断线重连 | 实用代码框架

Netty 断线重连解决方案

校园网断线重连,用爬虫来搞定!