本人写了一个程序,通过ADO调用存储过程,但不能读取存储过程返回值(返回值总是1),除了返回值外其它结果集、输入输出参数等都是对的。请大家帮忙看看有什么问题。存储过程:
--用于测试VC调用存储过程
CREATE PROCEDURE spSelRequest3
@reqcontent char(12),
@rowcount int output
 AS select * from Request where reqcontent like  ltrim(rtrim(@reqcontent)) + '%'
--set @rowcount = @@rowcount
set @rowcount = @@rowcount
        return @@rowcount
     //这句如果改成 return 123程序就能读到返回值
______________________________________________
控制台程序
//调用带输出参数和返回值的存储过程
_ConnectionPtr piConnection; //定义一个连接变量
piConnection.CreateInstance("ADODB.Connection");
CString strCn;
strCn.Empty();
strCn=_T("Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=;Initial Catalog=db;Data Source=db1");
_variant_t bcnstr=_variant_t(strCn);

_variant_t bunstr=_variant_t("");
_variant_t bpwdstr=_variant_t("");

//打开一个连接
piConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr),_bstr_t(bpwdstr),-1);
_CommandPtr cmd;
cmd.CreateInstance("ADODB.Command");

//返回值
_ParameterPtr pParamRet;
pParamRet.CreateInstance("ADODB.Parameter");
//pParamRet->Name="rowcount2"; //
pParamRet->Type=adInteger; //
pParamRet->Direction=adParamReturnValue; //声明是
cmd->Parameters->Append(pParamRet); //输入参数
_ParameterPtr pParamRk;
pParamRk.CreateInstance("ADODB.Parameter");
//pParamRk->Name="conetent"; //存储过程的参数1
pParamRk->Type=adChar; //字符串
pParamRk->Size=20; //
pParamRk->Direction=adParamInput;//表明是输入参数
pParamRk->Value=_variant_t("");//int->CString->_variant_t后赋值
cmd->Parameters->Append(pParamRk);
//输出参数
_ParameterPtr pParamOk;
pParamOk.CreateInstance("ADODB.Parameter");
//pParamOk->Name="rowcount"; //参数2名称
pParamOk->Type=adInteger; //整型
//pParamOk->Size=20;
pParamOk->Direction=adParamOutput; //声明是输出参数
cmd->Parameters->Append(pParamOk);
//_variant_t TheValue = MySet->GetCollect("FIELD_1");  
//CString sValue=(char*)_bstr_t(TheValue); 
cmd->ActiveConnection = piConnection;
cmd->CommandText="spSelRequest3"; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
    //执行,获得结果
_RecordsetPtr m_pRecordset;
    m_pRecordset = cmd->Execute(NULL, NULL, adCmdStoredProc);
m_pRecordset->QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&piAdoRecordBinding);
piAdoRecordBinding->BindToRecordset(&customRs);
printf("\n(4)%d",customRs.m_lid);

m_pRecordset->Close();
printf("\n(1)%s",(char*)_bstr_t(pParamRk->Value));
printf("\n(2)%s",(char*)_bstr_t(pParamOk->Value));
printf("\n(3)%s",(char*)_bstr_t(pParamRet->Value));
printf("\n*******");
}
****************************