我的项目是c/s结构的,但服务器和数据库所在机子可能不在同。也有可能联自己的数据库。
当书库哭失去连接时该怎么判断啊?这样做怎么样?
在程序开始是启动一个定时器,每过5秒取一条数据库中肯定有的数据,当没取到时就认为断开,就重连,连5次,还没连上,就弹出对话框说数据库失去连接了。

解决方案 »

  1.   

    BOOL bIsConnect = db.IsOpen();
      

  2.   

    发个样本给你参考
    void CSPCmppView::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    switch(nIDEvent)

    case PING_SMSC_TIMER: // (CAltCMPPApp*)AfxGetApp()
    //等数据库启动以后再去激活测检与网关的连接程序。数据库启动失败时就没必要往下继续了。
    if ( g_DataConnFlag == 1 ) //1 表示连接数据库成功,0表示失败;
        gpApp->m_pSPAgent->CheckSmscLink();
    break;
    case PING_DB_TIMER:
     
    //if(dblogin() == NULL) {
    //if(DB_Login(g_inicfgstruct.Db_User,g_inicfgstruct.Db_Pass,g_Module)) 
    //TraceMsg("数据库初始化成功!");
    //}
    if ( g_DataConnFlag == 1 ) //1 表示连接数据库成功,0表示失败;
         gpApp->m_pSPAgent->CheckdbprocLink();
    break;
    }
    CView::OnTimer(nIDEvent);
    }gpApp->m_pSPAgent->CheckdbprocLink()
    {
     if((m_dbproc == NULL) || (DBDEAD(m_dbproc))) {
    m_dbproc = DB_Getdbprocess(g_inicfgstruct.Db_Server,g_inicfgstruct.Db_Database);
    return;
    }PDBPROCESS DB_Getdbprocess(char *szSQLServer,char *szSQLDatabase)
    {
    DBPROCESS *dbp;
    if(login == NULL) return FALSE;
    dbp = dbopen(login, szSQLServer);
    if (NULL == dbp)
    {
    printf("Connect to SQL Server failure.");
    dbclose(dbp);
    g_DataConnFlag = 0;//数据库连接失败
    return (FALSE);
    }

    if(dbuse(dbp,szSQLDatabase) != SUCCEED)
    {
    dbclose(dbp);
    g_DataConnFlag = 0;//数据库连接失败
    return FALSE;
    }
    g_DataConnFlag = 1;//数据库连接成功
    return (dbp);}只是片断有些内容没发过来你参考下了
      

  3.   

    http://community.csdn.net/Expert/topic/3855/3855085.xml?temp=.5938837大哥 ,那你说监测的代码怎么写啊??说说思路,,谢谢了〉〉
    你用什么方式打开数据库的,我并不知道,但是都是通用的啊,你随便打开一张表试试就可以,或者好像1楼说的,有没有类似的IsOpen的函数,使用定时器定时调用测试一下就可以了。