在用ADO进行数据库编程时用COMMAND命令进行参数查询时,运行到EXECUTE命令时出错,代码如下:
         其中conncetDB已经与数据库进行连接,运行到最后一行时出错
_CommandPtr pCommand;
_ParameterPtr pParam1;
_ParameterPtr pParam2;
ParametersPtr pParameters;
_RecordsetPtr m_pRset;
m_pRset.CreateInstance( __uuidof( Recordset ));
pCommand.CreateInstance("ADODB.Command");
//connectDB->IsolationLevel = adXactChaos;
//connectDB->Attributes &= !adXactOommitRetainiiig;
pCommand->ActiveConnection = connectDB;
pCommand->CommandType = adCmdText;
pCommand->CommandText = _bstr_t("select ? from ? where stop_ac = 1");
pParam1 = pCommand->CreateParameter("",adBSTR,adParamInputOutput,sizeof(_variant_t),_variant_t("PIPE_NAME"));
pParam2 = pCommand->CreateParameter("",adBSTR,adParamInputOutput,sizeof(_variant_t),_variant_t("WATER_PIPE_DB"));
pParameters = pCommand->Parameters;
pParameters->Append(pParam1);
pParameters->Append(pParam2);
_variant_t vRowsAffected;
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
m_pRset = pCommand->Execute(&vRowsAffected,&vNull,adCmdText);

解决方案 »

  1.   

    你的是存储过程吧,Execute的最后一个参数??
      

  2.   

    好像Table名称和Field名称不能做为参数吧。
    你这种情况还不如在客户端生成SQL语句。
      

  3.   

    同上面一样的想法,表明和列名做参数没有这么用过,可否这样做:
    定义TCHAR sqltext[100];
    wsprintf(sqltext , "select %hs from %hs where stop_ac = 1", your_filed , your_table);
    然后:
    pCommand->CmommandText = (_bstr_t)sqltext;
    pCommand->Execute(NULL,NULL,adCmdText);
    这样做避免了参数的传递了。
    或直m_pReset->Open(....)也可以!