如何让_CommandPtr输出他执行的实际sql语句,高分求助,可以加分
int ExecuteProcedureEx(LPCSTR lpstrSPName, vector<stuParms> &vecParams, int *lpRet)
{
try
{
if( !lpstrSPName || !lpRet )
return -1;
//第一个为返回值
_CommandPtr cmdRet;
size_t szCount = vecParams.size();
_variant_t varRoyalty = COleVariant( static_cast<long>(0) );
cmdRet.CreateInstance( __uuidof(Command) );
cmdRet->Parameters->Append( cmdRet->CreateParameter("Return", adInteger, adParamReturnValue, sizeof(long), varRoyalty ) );
for (int i=0; i<szCount; ++i) //‘0’ 位置为返回值位
{
stuParms stuTmp = vecParams[i];
_ParameterPtr prmTmp= cmdRet->CreateParameter(stuTmp.m_Name, stuTmp.m_Type, stuTmp.m_Direction, stuTmp.m_Size, stuTmp.m_Value);
cmdRet->Parameters->Append( prmTmp );
}
//执行存储过程
cmdRet->CommandText = lpstrSPName; //存储过程名
cmdRet->PutCommandType(adCmdStoredProc);
cmdRet->ActiveConnection = m_pCon;
cmdRet->Execute(0, 0, adCmdStoredProc);
//_bstr_t lpPrt = cmdRet->GetCommandText();
//它只能输出如此:{ ? = call 存储过程名 (?, ?, ?) }
//在输出完整的sql,就是说‘?’被真正参数替换!
_variant_t varRet = cmdRet->Parameters->GetItem("Return")->GetValue();
*lpRet = varRet.lVal;
cmdRet.Release();
return S_OK;
}
catch (_com_error &e)
{
string strError = "Unknown Error";
if(e.Description().length() > 0)
{
strError = e.Description();
}
return -1L;
}
catch(...)
{
return -1L;
}
}