f(m_conn->GetState()==adStateOpen)
            m_conn->Close();   
不要放到catch里啊  

解决方案 »

  1.   


    这个函数放在线程里,所以没有让出错信息显示出来.情况大致是这样的:远程往客户一台SQL server服务器快速导入数据时,会造成这台服务器的连接中断,执行这个操作的电脑都不能Ping通这台服务器了(但别的电脑可以Ping通),然后就出现这样的错误
      

  2.   

    [code=c][/codbool CDlgOrder::ExcuteSQLCommandNoReturn(CString strSql)
    {
    bool bResult = true;
    _ConnectionPtr m_conn;
    CString open;
    open.Format(_T("Provider=SQLOLEDB;Server=%s;Database=%s;UID=%s;PWD=%s;Pooling=false;"),CPublic::m_strDBServer,CPublic::m_strDBName,CPublic::m_strDBUserName,CPublic::m_strDBPWD);
    try
    {
    m_conn.CreateInstance(__uuidof(Connection));
    m_conn->ConnectionTimeout=600;
    m_conn->CommandTimeout=120;
    m_conn->Open((_bstr_t)open,_T(""),_T(""),adModeUnknown);
    }
    catch(_com_error e)
    {
    CString strErrormessage;  
    strErrormessage.Format(_T("连接数据库失败!\r错误信息:%s"),e.ErrorMessage());  
    AfxMessageBox(strErrormessage);  
    bResult =  false;
    } try
    {
    m_conn->Execute((_bstr_t)strSql,NULL,adExecuteNoRecords);
    }
    catch(_com_error e)
    {
    CString strK3ErrorMsg;
    strK3ErrorMsg.Format(_T("查找失败!错误信息:%s"),e.ErrorMessage());  
    AfxMessageBox(strK3ErrorMsg);  
    bResult = false;
    } //异常处理
    if(!bResult)
    {
    if(m_conn->GetState())
    m_conn->Close();
    } return    bResult;
    }e]
      

  3.   


    bool CDlgOrder::ExcuteSQLCommandNoReturn(CString strSql)
    {
    bool bResult = true;
    _ConnectionPtr m_conn;
    CString open;
    open.Format(_T("Provider=SQLOLEDB;Server=%s;Database=%s;UID=%s;PWD=%s;Pooling=false;"),CPublic::m_strDBServer,CPublic::m_strDBName,CPublic::m_strDBUserName,CPublic::m_strDBPWD);
    try
    {
    m_conn.CreateInstance(__uuidof(Connection));
    m_conn->ConnectionTimeout=600;
    m_conn->CommandTimeout=120;
    m_conn->Open((_bstr_t)open,_T(""),_T(""),adModeUnknown);
    }
    catch(_com_error e)
    {
    CString strErrormessage;  
    strErrormessage.Format(_T("连接数据库失败!\r错误信息:%s"),e.ErrorMessage());  
    AfxMessageBox(strErrormessage);  
    bResult =  false;
    } try
    {
    m_conn->Execute((_bstr_t)strSql,NULL,adExecuteNoRecords);
    }
    catch(_com_error e)
    {
    CString strK3ErrorMsg;
    strK3ErrorMsg.Format(_T("查找失败!错误信息:%s"),e.ErrorMessage());  
    AfxMessageBox(strK3ErrorMsg);  
    bResult = false;
    } //异常处理
    if(!bResult)
    {
    if(m_conn->GetState())
    m_conn->Close();
    } return    bResult;
    }
      

  4.   

    这段代码还是有逻辑错误的,这样改吧:bool CDlgOrder::ExcuteSQLCommandNoReturn(CString strSql)
    {
    bool bResult = true;
    _ConnectionPtr m_conn;
    CString open;
    open.Format(_T("Provider=SQLOLEDB;Server=%s;Database=%s;UID=%s;PWD=%s;Pooling=false;"),CPublic::m_strDBServer,CPublic::m_strDBName,CPublic::m_strDBUserName,CPublic::m_strDBPWD);
    do 
    {
    try
    {
    m_conn.CreateInstance(__uuidof(Connection));
    m_conn->ConnectionTimeout=600;
    m_conn->CommandTimeout=120;
    m_conn->Open((_bstr_t)open,_T(""),_T(""),adModeUnknown);
    }
    catch(_com_error e)
    {
    CString strErrormessage;  
    strErrormessage.Format(_T("连接数据库失败!\r错误信息:%s"),e.ErrorMessage());  
    AfxMessageBox(strErrormessage);  
    bResult =  false;
    break; //终止后续操作
    } try
    {
    m_conn->Execute((_bstr_t)strSql,NULL,adExecuteNoRecords);
    }
    catch(_com_error e)
    {
    CString strK3ErrorMsg;
    strK3ErrorMsg.Format(_T("查找失败!错误信息:%s"),e.ErrorMessage());  
    AfxMessageBox(strK3ErrorMsg);  
    bResult = false;
    break; //终止后续操作(如果while里面还有相关数据库操作的话,否则这句可不要)
    }
    } while (0);
    //异常处理
    if(!bResult)
    {
    if(m_conn->GetState())
    m_conn->Close();
    } return    bResult;
    }