存储过程为,其中 RegionId,RegionDes 为字段student_message 为返回值
CREATE PROCEDURE    insert_data
                                        (
                                          @RegionID integer,
                                          @RegionDes nchar(50),
                                          @student_message [varchar] (30) output
                                        )
AS  set nocount off
                  begin tran
                   if (exists (select * from Region where RegionId=@RegionID))
                        begin
                        select @student_message='用户名已经存在,请重新输入'
                        end
                 else
                     begin
                           insert into Region(RegionId,RegionDes) values(@RegionId,@RegionDes)
                           select  @student_message=  '数据插入成功'
                   end
                   commit tran
Set nocount off
GO
那吗这保存段代码应该如何改进呢
 with    ADOPro do
   begin
     AdoPro.ProcedureName:='insert_data';
     adopro.Parameters.Refresh;
     Parameters.ParamByName('@RegionID').Value:=0;
     Parameters.ParamByName('@RegionDes').Value:=edit1.Text;
     AdoPro.Prepared;
     adoPro.ExecProc;   end;
谢谢各位大虾

解决方案 »

  1.   

    两个地方错了
    1.存储过程commit tran 之后加 return 0,表示返回成功
    2.程序里,输出参数也要给个初值
     with    ADOPro do
       begin
         AdoPro.ProcedureName:='insert_data';
         adopro.Parameters.Refresh;
         Parameters.ParamByName('@RegionID').Value:=0;
         Parameters.ParamByName('@RegionDes').Value:=edit1.Text;
         Parameters.ParamByName('@student_message').Value:='';
         adoPro.ExecProc;
         if ParamByName('@returnValue').Value =0 then //@returnValue名字记不清了,存储过程的静态参数里有
         showmessage(ParamByName('@student_message').Value);
       end;