没人试过调用存储过程吗?

jkknew 2003-01-24 09:45:40
本人写了一个程序,通过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*******");
}
****************************

...全文
17 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lastdrop 2003-01-24
  • 打赏
  • 举报
回复
@@rowcount的用法好像有问题,你既然想得到记录数,为什么不直接调用

select @rowcount=count(*) from Request where reqcontent like ltrim(rtrim(@reqcontent)) + '%'

aben456 2003-01-24
  • 打赏
  • 举报
回复
干吗要把2个变量同名呢
aben456 2003-01-24
  • 打赏
  • 举报
回复
@@rowcount
是你自己定义的全局变量吗

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧