_ConnectionPtr m_dbConn;
_CommandPtr m_pCommand;
我的程序中利用 _ConnectionPtr 对象做数据库的连接,由于此应用的数据库操作很频繁,本来处理时是每次操作之前,创建一个连接对象,然后打开数据库的连接,现在发现在数据操作特别频繁的时候这样可能会造成堵塞,造成新的问题。所以想在建立一个成员变量,在构造函数时就将此连接对象创建并打开数据库的连接,但是这样在数据库出现问题或者网络出现故障时,造成连接的物理通道端口,那么此时如何能让应用程序自动的在连接到数据库呢?

解决方案 »

  1.   

    huangyj(天外飞仙的师傅)兄,能否告知怎么检查连接是否断开
      

  2.   

    呵呵,其实对于我提到的问题,现在也没有办法检查,我只是利用
    下面的代码检查是否连接过而已。
    if(m_pMyDb->State!=adStateClosed)
      

  3.   

    bohut(伯虎) 可能有什么好的办法可以用。
      

  4.   

    "我的程序中利用 _ConnectionPtr 对象做数据库的连接,由于此应用的数据库操作很频繁,本来处理时是每次操作之前,创建一个连接对象,然后打开数据库的连接..."
    打开数据库连接需要很长时间。
    第2种做法是正确的。
    然而你可以在数据库操作的时候加错误捕获处理,(也一般数据库程序必须的处理)
    try
    {}catch(...)
    然后从中得到错误号,就可以判断是否是断开连接。断开则重连。
      

  5.   

    我的做法是try(),catch()
    因为数据库断开会导致异常,捕获到之后在catch段处理里面加GetLastError(),根据得到的错误号判断数据库的状态。
    我的经验:直接判断数据库的连接状态是不太准确的。
    或许你可以参考一下。
      

  6.   

    bohut(伯虎)
    你的这个方法确实可行。不过对于不同的Provider和对应不同的数据库时,是否存在着对应的错误代码不一样呢?如果这样,那可能会比较费劲了。
      

  7.   

    这个不会的,因为GetLastError得到的都是标准的windows错误代码。
      

  8.   

    为什么我每次测试的时候,将网线拔掉之后,报告错误的时候利用
    GetLastError()
    得到的错误代码都是等于 0 呢?
    只有利用 catch(_com_error &e) 才能得到错误信息
      

  9.   

    用了一个笨办法。
    在每次操作之前,执行一下查看当前的Sql版本的语句,如果出错,则应该为数据库连接错误,那么此时重新调用打开连接的方法执行一下。
      

  10.   

    也可以用 .udl文件测试连接的啊
      

  11.   

    bigqueues(bigqueue) 
    如何利用.UDL 文件测试连接?请指教
      

  12.   

    关注 ,我继问一下 bohut(伯虎)  兄  如何才能获得
    数据库断开的通知?(如突然拔掉网线 ,异常会抛出吗?)