SQL的存儲過程實例返回值

一直沒有找到一種好的方法來引用有返回值的存儲過程的方法,使我在添加數據中走了不少的彎路,最近,在查閱了大量的資料之後,終於在微軟的一個實例中找到了一種良好的方法。
首先編寫好一有返回值的存儲過程
 
create procedure proc_name
     @para1 nchar(20),      --輸入參數
     @para2 int = null out --輸出參數,供程序使用
as
     set nocount on
     if ( not exists (select * from employee where
em_name=@para1))
     begin
         insert into employee(name) values(@para1)   
         select @para2=@@identity        --返回添加記錄的ID
         return 1                                  --返回是否成功添加數據
     end
     else
        return 0                                 --返回失敗
go

然後是調用存儲過程的方法
sqlcommand command;
command = new sqlcommand(proc_name,new sqlconnection(connectionstr));
command.paraments.add("@para1"),"name1");    //輸入參數,職員姓名
command.paraments.add(new sqlparament("@para2",     //生成一輸出參數
SqlDbType.Int;             //參數數據類型
ParamenterDirection.OutPut,      //輸入輸出類型
0,
0,
string.Emplty,
DataRowVerstion.Default,
null)                 //參數值,輸入參數時需提供
);
command.commandtype=commandtype.StoredProcedure;
command.connection.open();
command.executenonQuery();
int pkid=(int)command.Parameters["@para2"].value;    //得到輸出參數的值
command.connection.close();
此處是引用輸出參數,如果要引用返回值(是否成功添加數據)則只需把ParamenterDirection的類型改爲returnvalue;再自己改一個參數名就可以了.

DECLARE checkid_CURSOR CURSOR FOR
EXEC (@execsql)
OPEN checkid_CURSOR
FETCH NEXT FROM checkid_CURSOR INTO @szTypeId, @sonnum, @par,@soncount
WHILE (@@FETCH_STATUS = 0)
Begin
Set @nSon=@sonnum
Set @nCount=@soncount
DECLARE @tempId VARCHAR(5),@nReturn INT
Set @soncount=@soncount+1
EXEC @nReturn=inttostr @soncount,@tempId out
IF @nReturn=-1
BEGIN
CLOSE checkid_CURSOR
DEALLOCATE checkid_CURSOR
RETURN -2
END
ELSE
BEGIN
IF @sztypeid='00000'
Set @createdid=@tempId
ELSE
Set @createdid=RTRIM(@szTypeid)+@tempId
END
FETCH NEXT FROM checkid_CURSOR INTO @szTypeId, @sonnum, @par,@soncount
End
CLOSE checkid_CURSOR
DEALLOCATE checkid_CURSOR
RETURN 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章