执行多个存储过程,当中间出错的时候想回滚!应该怎么写,我google了下说_CommandPtr不能用事务回滚,是这样吗?可能一个过程还好,可是我的是多个一起执行!

解决方案 »

  1.   

    具体的CommandPtr不知道,没有用过。但_ConnectionPtr是完全可以执行用事操作的,当然也可以执行存储过程了。
      

  2.   

    我试了,不能回滚啊,,,用ConnectionPtr的回滚了以后没有效果!
      

  3.   

    _ConnectionPtr->BeginTrans(); //开始事务
    _ConnectionPtr->CommitTrans(); //提交事务
    _ConnectionPtr->RollbackTrans (); //回滚事务
      

  4.   

    try{
    _ConnectionPtr->BeginTrans(); //开始事务 //用_CommandPtr对象执行多个存储过程
    _ConnectionPtr->CommitTrans(); //提交事务 
    }
    catch()
    {
    _ConnectionPtr->RollbackTrans (); //回滚事务
    }
      

  5.   

    我是这样做的,可是不行啊!RollbackTrans 的时候数据还是插入了!
      

  6.   


    CIniInfo m_Ini;
    _ConnectionPtr m_pConnection;
    _CommandPtr  m_pCommand;
    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pConnection->Open(m_Ini.m_sConnectSql, "", "", adModeUnknown);
    m_pCommand.CreateInstance(__uuidof(Command));
    m_pCommand->ActiveConnection = m_pConnection;
    m_pCommand->CommandType = adCmdStoredProc;
    _ParameterPtr m_pParam;
    m_pCommand->CommandText=_bstr_t("UP_CA_TASK_LIST_ADD");
    m_pConnection->BeginTrans();
    _bstr_t BATCH_ID=_bstr_t(newGUID());
    list<TaskListParam*>::iterator listparam=taskParams.begin();
    try
    {
    while (listparam!=taskParams.end())
    {

    m_pParam = m_pCommand->CreateParameter("OUT_VAR_in",adVarChar, adParamInput,4000, (*listparam)->outVar);
    m_pCommand->Parameters->Append(m_pParam) ;

    m_pParam = m_pCommand->CreateParameter("OUT_EXPRESSION_in",adVarChar, adParamInput,4000,(*listparam)->outExpression);
    m_pCommand->Parameters->Append(m_pParam) ;
    m_pParam = m_pCommand->CreateParameter("LOCAL_VAR_in",adVarChar, adParamInput,4000,(*listparam)->localVer);
    m_pCommand->Parameters->Append(m_pParam) ;
    m_pParam = m_pCommand->CreateParameter("GROUP_ID_in",adVarChar, adParamInput,4000,(*listparam)->treeGuid);
    m_pCommand->Parameters->Append(m_pParam) ;
    m_pParam = m_pCommand->CreateParameter("INS_GUID_in",adVarChar, adParamInput,4000,(*listparam)->insGuid);
    m_pCommand->Parameters->Append(m_pParam) ;
    m_pParam = m_pCommand->CreateParameter("CM_ID_in",adVarChar, adParamInput,4000,(*listparam)->cmId);
    m_pCommand->Parameters->Append(m_pParam) ; m_pParam = m_pCommand->CreateParameter("TL_TIME_in",adDate, adParamInput,sizeof(DATE),_variant_t((*listparam)->caltime));//_variant_t(tlTime)
    m_pCommand->Parameters->Append(m_pParam) ;
    m_pParam = m_pCommand->CreateParameter("CHECK_OBJ_ID_in",adVarChar, adParamInput,4000,(*listparam)->objGuid);
    m_pCommand->Parameters->Append(m_pParam) ;
    m_pParam = m_pCommand->CreateParameter("BATCH_ID_in",adVarChar, adParamInput,4000,BATCH_ID);
    m_pCommand->Parameters->Append(m_pParam) ;
    //Connect();
    m_pCommand->Execute(NULL,   NULL,   adCmdStoredProc); 
    listparam++;
    }
    m_pConnection->CommitTrans();
    }
    catch (...)
    {
    m_pConnection->RollbackTrans();
    }
      

  7.   

    你确定程序进入到rollback了吗?
      

  8.   

    如果你只是想添加数据的话就用addnew吧!
    _ConnectionPtr->BeginTrans(); //开始事务 
    _RecordsetPtr->AddNew();_RecordsetPtr->Update();_ConnectionPtr->CommitTrans(); //提交事务 
    _ConnectionPtr->RollbackTrans (); //回滚事务