_CommandPtr不能用事务吗??? 执行多个存储过程,当中间出错的时候想回滚!应该怎么写,我google了下说_CommandPtr不能用事务回滚,是这样吗?可能一个过程还好,可是我的是多个一起执行! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体的CommandPtr不知道,没有用过。但_ConnectionPtr是完全可以执行用事操作的,当然也可以执行存储过程了。 我试了,不能回滚啊,,,用ConnectionPtr的回滚了以后没有效果! _ConnectionPtr->BeginTrans(); //开始事务_ConnectionPtr->CommitTrans(); //提交事务_ConnectionPtr->RollbackTrans (); //回滚事务 try{_ConnectionPtr->BeginTrans(); //开始事务 //用_CommandPtr对象执行多个存储过程_ConnectionPtr->CommitTrans(); //提交事务 }catch(){_ConnectionPtr->RollbackTrans (); //回滚事务} 我是这样做的,可是不行啊!RollbackTrans 的时候数据还是插入了! 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(); } 你确定程序进入到rollback了吗? 如果你只是想添加数据的话就用addnew吧!_ConnectionPtr->BeginTrans(); //开始事务 _RecordsetPtr->AddNew();_RecordsetPtr->Update();_ConnectionPtr->CommitTrans(); //提交事务 _ConnectionPtr->RollbackTrans (); //回滚事务 bmp 加文字 放大 转JPG 一个CMap的问题不能编译请教大家. convert integer to strings 用什么函數? 请各位仁兄推荐几个VC学习的QQ群,多谢了! 我的程序这里那里错了呀~~~~~ 大虾们指教,这断代码问题在那里,结果和预定的不一样? unix下c++中嵌入open client编程时的问题 紧急!!怎么用vc++读.dbf文件? DECLARE_DYNAMIC(CChatSocket)这个语句有什么作用? 为什么在我的无效区域绘制的图不能完整的贴到窗口中 当前运行中的DLL程序自已如何取得它本身的路径 ? 内存绘制没有显示
_ConnectionPtr->CommitTrans(); //提交事务
_ConnectionPtr->RollbackTrans (); //回滚事务
_ConnectionPtr->BeginTrans(); //开始事务 //用_CommandPtr对象执行多个存储过程
_ConnectionPtr->CommitTrans(); //提交事务
}
catch()
{
_ConnectionPtr->RollbackTrans (); //回滚事务
}
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();
}
_ConnectionPtr->BeginTrans(); //开始事务
_RecordsetPtr->AddNew();_RecordsetPtr->Update();_ConnectionPtr->CommitTrans(); //提交事务
_ConnectionPtr->RollbackTrans (); //回滚事务