我在sql2000中写了一张表
create table stu(
xinming char(50),
age   integer
)
加入一个记录
insert into stu(xinming,age) values('yang',23)
写了个存储过程 pro1
create procedure pro1 @age1 integer,@name1 char(50) output
as
select @name1=xinming from stu where age=@age1
go在查询分析器中提示成功!vc中代码:
_CommandPtr cmd;
cmd.CreateInstance("Command");
//id号
_ParameterPtr pParamRk;
pParamRk.CreateInstance("Parameter");
pParamRk->Name=""; //存储过程的参数1
pParamRk->Type=adInteger; //整型
pParamRk->Size=sizeof(int); //
pParamRk->Direction=adParamInput;//表明是输入参数
CString tstr;
tstr.Format("%d",id);
pParamRk->Value=_variant_t(tstr);//int->CString->_variant_t后赋值
cmd->Parameters->Append(pParamRk);
//返回值
_ParameterPtr pParamOk;
pParamOk.CreateInstance("Parameter");
pParamOk->Name=""; //参数2名称
pParamOk->Type=adChar; //字符串
pParamOk->Size=20; //大小为20个字节
pParamOk->Direction=adParamOutput; //声明是输出参数
cmd->Parameters->Append(pParamOk);

cmd->ActiveConnection = piConnection;
cmd->CommandText="pro1"; //存储过程的名字
cmd->CommandType=adCmdStoredProc;//表示为存储过程adCmdStoredProc
    //执行,获得结果
    cmd->Execute(NULL, NULL, adCmdStoredProc);
    //将值返回
return (char*)_bstr_t(pParamOk->Value);
始终没有得到返回值,这是怎么回事,我要是把存储过程改掉,变成两个输入参数,存储过程变成insert into stu(xinming,age) values(@name1,@age1)
vc代码稍微更改一下,值是可以插入到表中的,这是怎么回事?????????为什么带有输出参数就不行??????vc6 +win2000 server+sql server2000

解决方案 »

  1.   

    输入部分: 
       pParamOk->Name="age1";
    输出部分: 
       pParamOk->Name="name1";
    这儿应告诉computer大叔,你对应操作的存储过程中的形参名,computer虽然很热心,但你不告诉它,它也不能帮你啊!
      

  2.   

    好像不是Name 的问题,只要存储过程中有INSERT 语句,输出参数就总是不正确的,不知道什么原因
      

  3.   

    高手帮帮我!!
    http://expert.csdn.net/Expert/topic/2603/2603404.xml?temp=.8833124
      

  4.   

    提示成功只是没有语法上的错误
    你应该这样写
    create procedure pro1 @age1 integer,@name1 char(50) output
    as
    declare @SQL Nvarchar(100)
    select @SQl=N'Select @A=xinming from stu where age='+cast(@age1 as Nvarchar(3))
    Exec sp_executesql @SQl,N'@A varchar(20) output',@name1 outputgo
      

  5.   

    是因为Insert语句产生了影响行数,所以Select的时候没有记录集返回。
    但是在查询分析器中是成功的。
      

  6.   

    你这样做会得到一个记录集,也许只有1条记录,也许有多条,存储过程返回记录集的话必须
    rs=cmd.execute