如题

解决方案 »

  1.   

    _ConnectionPtr m_pConneciton;
    if(m_pConnection->state)//如果关闭了是0,打开是1
      

  2.   

    _ConnectionPtr m_pConneciton;
    if(m_pConnection->state)//如果关闭了是0,打开是1
    ==========================
    你的方法我试过,但是你的_ConnectionPtr对象必须是由:
    m_pConnection.CreateInstance("ADODB.Connection"); 
    产生的,试问:如果第一次连接数据库时,m_pConnection对象还没有产生,你
    就使用其成员state,必然会产生非法访问错误
      

  3.   

    m_pConnection.CreateInstance("ADODB.Connection"); 要看你创建的位置了,一般在App中创建
      

  4.   

    _ConnectionPtr m_pConneciton;
    if(m_pConnection->state)//如果关闭了是0,打开是1
    ///////////////////////////////////////////////////////
    上叙述方法是不行的。我也遇到过这样的问题,而且这样处理的。但测试的时候发现,一但连接上数据库后,把网线拔了也就是说让他和数据库的连接中断了,跟踪state的状态一直为1。我也没能找到原因。
    /////////////////////////////////////////////////////////
    我的解决办法是用了一个替代办法,在进行任何操作之前,我去检索一个肯定存在在数据库中的表,如果操作成功,说明连接正常。否则从新连接,该程序到现在运行一直很正常。
      

  5.   

    To  laiyiling(最熟悉的陌生人):开始时连接正常。过一会,,数据库断开,此时执行的SQL必然失败。
    但那个状态还是 1 ,如何解释?用什么方法可以知道此次数据库操作是数据库断开了。或者是语法错误或约束什么的造成。。严重关注此帖。。
      

  6.   

    try
    ...
    catch 
    ...
    如果捕获的信息中,是断开,则GOTO 你重新连接操作
      

  7.   

    Q 用什么方法可以知道此次数据库操作是数据库断开了。或者是语法错误或约束什么的造成A catch 捕捉异常
      

  8.   

    To:jinxuliang(smielfox) 
    我没有试过,估计你的方法应该可以判断连接是否断开。但是我想找一种开销更小并且更简单易行的办法。比如_ConnectionPtr是否能返回某个错误值表示和服务器的连接已断开需要重新连接数据库。
      

  9.   

    To:axiaowin(baisha)
    能否具体说一下,比如说错误码是多少?
      

  10.   

    #define E_UNEXPECTED                     _HRESULT_TYPEDEF_(0x8000FFFFL)
    #define E_FAIL                           _HRESULT_TYPEDEF_(0x80004005L)
    都可能是连接断开,其他的我这儿还没发现,知道的也发一个
      

  11.   

    好像没有什么好的解决办法,
    Requery()一下然后根据返回值判断数据库是否连接正常
      

  12.   

    pConnection->GetStates();
    pConnection->GetStatus();
      

  13.   

    To: jszj(老板说mis部不是赚钱的部门,中国软件) 
    我在MSN中找不到Connection的GetStates()方法!
      

  14.   

    对象创建是否成功可以用下面的方法:
    HRESULT hr;
    hr = m_pConnection.CreateInstance("ADODB.Connection");
    if(SUCCESSDED(hr))  //对象创建成功

        ........
    }
    开始时连接正常。过一会,,数据库断开,此时执行的SQL必然失败。
    但那个状态还是 1 ,如何解释?
    在使用m_pConnection前先用!
    if(m_pConnetion.State)
       m_pConnection.Close();//保证你下面的连接对象都是新的!  
      

  15.   

    _ConnectionPtr m_pConnect;
    ......
    if(m_pConnect->GetState() != adStateOpen)
    {
       //以前的连接已断开,重新连接
       ......
    }
    else
    {
       //连接保持,可以继续使用
       ......
    }
      

  16.   

    try
    {  }
    catch
    {  }
    捕捉一下错误看看