szMsgContent = "内容";
szMsgID = "80001";
szExcute = "INSERT INTO SendSMSContent(MTMsgID, MTContent) \
VALUES('" + szMsgID + "', '" + szMsgContent + "')";
BOOL bSuccess = theApp.m_adoConnection.Execute(szExcute);在主线程中都能成功,在新创建的线程中执行Execute就会停在这里不动了,有可能会有多个线程同时操作。请高手指教。

解决方案 »

  1.   

    BOOL CAdoConnection::Execute(LPCTSTR lpstrExec)
    {
    ASSERT(m_pConnection != NULL);
    ASSERT(strcmp(lpstrExec, _T("")) != 0);
    _variant_t vRecords;

    //m_nRecordsAffected = 0;

    try
    {
    m_pConnection->CursorLocation = adUseClient;
    m_pConnection->Execute(_bstr_t(lpstrExec), &vRecords, adExecuteNoRecords);
    //m_nRecordsAffected = vRecords.iVal;
    return TRUE;
    }
    catch(_com_error &e)
    {
    AfxMessageBox(e.ErrorMessage());
    //dump_com_error(e);
    return FALSE;
    }
    }
      

  2.   

    现象不全:在主线程中都能成功,在新创建的线程中执行Execute就会停在这里不动了可能是死循环
      

  3.   

    m_adoConnection最好不要跨线程使用,可以再创建一个连接
      

  4.   

    m_pConnection是不是在其他线程中也使用了?如果是的话,最好改改。有些变量不要跨线程使用!
      

  5.   

    m_adoConnection 作一个全局共享的,然后线程中直接利用这个连接
      

  6.   

    楼主也是做网关的啊?
    你多线程就同步一下,确保在同一时刻只有一次m_pConnection.excute
      

  7.   

    如果你的程序调用的数据接口是ado接口,对于多线程函数,在线程启动的时候 也需要调用CoInitialize初始化com接口,否则会出错的,只有连接全局共享,只要注意同步,应该没有问题.