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; }

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

时间: 2024-10-26 15:50:10

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

MFC,ADO方式实现数据库操作

参考: MSDN数据访问编程 (MFC/ATL): https://msdn.microsoft.com/zh-cn/library/kd4ck1tt.aspx?f=255&MSPPError=-2147217396 ado方式操作数据库封装类的使用范例: http://download.csdn.net/detail/xianglitian/2383423 使用ADO封装类的数据库程序开发实例: http://wenku.baidu.com/link?url=A3g4_Ucz1RuijQMZ8

通过ADO方式连接数据库

首先你正确安装了MySQL的数据库驱动程序(mysql-connector-odbc-5.1.6-win32.msi )或者64位的 本地连接: 1.在桌面上新建一个空的文本文件mysql.txt,重命名为mysql.udl: 2.双击这个mysql.udl文件,打开“数据库连接属性”对话框,在“提供程序”页选择”Micrsoft Ole DB Provider for ODBC Drivers“, 点击下一步: 3.在“连接”页的,"指定数据源"选择"使用连接字符串&quo

ADO方式连接数据库--添删查修

程序界面: 程序源码: 1 unit mydb; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, DB, DBTables, StdCtrls, Grids, DBGrids, ADODB, ExtCtrls, DBCtrls, 8 Mask; 9 10 type 11 TForm1 = class(TForm) 12 DB

C++ ADO方式连接mysql数据库

对于软件开发其实说白了就是在不停地和数据打交道, 所以数据库的操作是必不可少的, 接下来介绍VC开发中利用ADO建立ODBC数据源来访问MySQL数据库. 从我接触的数据库编程方式来说, 我觉得在vc开发连接数据库是比较难的, 也是很容易出错. 在android中, 系统自带sqlite数据库,只需要使用SQLiteOpenHelper抽象类即可完成与数据库的操作. 在java中, 使用jdbc连接mysql数据库, 下载相应jar调用相应接口,传入数据库类型与用户名密码进行数据库的操作. 但是

nodejs使用MYSQL连接池,断线重连

两种方式解决1.你可以配置mysql的连接池 var mysql = require('mysql'); var pool = mysql.createPool({ host: 'localhost', user: 'nodejs', password: 'nodejs', database: 'nodejs', port: 3306 }); var selectSQL = 'select * from t_user limit 10'; pool.getConnection(function

UniDAC 断线重连方法

KBM服务端的 UniConnection 要实现断线重连(连接 MSSQLServer), 需要以下几个步骤: 一.修改单元文件:kbmMWUniDAC.pas procedure TkbmMWUNIDACConnection.InternalOpenConnection(ConnectionPool:TkbmMWCustomConnectionPool); begin // Create new database connection using template. with TkbmMWU

ado.net连接数据库的用法

一.简单介绍ADO.NET System.Data:DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint System.Data.Common(各种数据访问类的基类和接口):DataColumnMapping,DataTableMapping System.Data.SqlClient(对Sql Server进行操作的数据访问类): 1)SqlConnection:数据库连接器 2)SqlCommand:数据库命名对象 3)Sq

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform)让用户方便的操作数据库中的数据. 什么是ADO.NET 是一组库类,System.Data. Ado.net组成 Connection:用来连接数据库 Command:用来执行SQL语句 DataReader:只读.只进的结果集,一条一条读取数据(SteamReader.XmlReader) Da

Mina 断线重连

定义:这里讨论的Mina 断线重连是指使用mina作为客户端软件,连接其他提供Socket通讯服务的服务器端.Socket服务器可以是Mina提供的服务器,也可以是C++提供的服务器. 一.断线重连的方式: 1. 在创建Mina客户端时增加一个监听器,或者增加一个拦截器,当检测到Session关闭时,自动进行重连. 2. 在第1种方式的基础上,增加客户端的读写通道空闲检查,当发生Session关闭或者读写空闲时,进行重连. 第一种方式比较传统,优点是简单方便,适合网络稳定.数据量不大(1M带宽以