ADO 的异常处理都是你那样作的,看看是不是其他地方的问题,如Error()那个函数。

解决方案 »

  1.   

    zero100真感谢你的指引,原文是这样的:
    try{
    _variant_t vNewCurstomID;
    pConn->Open(lpszConnstr, "", "", -1);
    pQueryRs->Open(_T("Select top 1 iCustomerID FROM Custom ORDER BY iCustomerID DESC"),
    lpszConnstr, adOpenKeyset, adLockOptimistic, adCmdText);
    vNewCurstomID = pQueryRs->GetCollect(_T("iCustomerID"));
    pQueryRs->Close(); pRs->Open(_T("CustomEx"), (IDispatch *)pConn, adOpenKeyset, adLockOptimistic, adCmdTable);
    pRs->AddNew();
    pRs->Fields->GetItem("iRelateRate")->Value = *RelateRate;
    pRs->Fields->GetItem("iValue")->Value = *Value;
    pRs->Fields->GetItem("cMainPrincipal")->Value = *MainPrincipalID;
    pRs->Fields->GetItem("iMainLinkman")->Value = *MainLinkmanID;
    pRs->Fields->GetItem("iSellPointCount")->Value = *SellPointCount;
    pRs->Fields->GetItem("fSellSum")->Value = *SellSum;
    hr = pRs->Update();
    pRs->Close();
    pConn->Close();
    }
    catch(_com_error &e)
    {
    if((TCHAR *)e.Description() == NULL)
    {
    Error(e.ErrorMessage(), e.GUID(), e.Error());
    }
    else
    {
                            TCHAR * lpErr;
                                lpErr = W2A(e.Description());   <----问题在这里!在catch中不能用ATL字符串宏,因为catch不是正常退出,所导致W2A所自动分配的内存不能很好的释放使DLLHOST崩溃。
    Error(lpErr, e.GUID(), e.Error());
    } SetContextAbort();
    return e.Error();
    } SetContextComplete();
      

  2.   

    看来你的问题解决了。
    真替你高兴。
    有机会多联系
    OICQ:604744
    email:[email protected]