日期:2014-05-19  浏览次数:21004 次

存储过程输出参数的例子
我写了一个插入表的存储过程
CREATE   PROCEDURE   [AddOppt]
@name   varchar(20),@chengwei   varchar(10),   @company   varchar(50),    

@tel   varchar(20),   @addr   varchar(100),    

@country   varchar(50)

AS
insert   OpptFeedback  

(name,chengwei,company,tel,addr,country)   values  

(@name,@chengwei,@company,@tel,@addr,@country)
GO
现在想改一下这个存储过程,加一个输出参数@outputOpptid,就是取得当前插入表的新记录的的ID号(自增),之前有告诉我在insert后面跟select   scope_identity(),可以取到,
现在的问题是,我不知道这个带输出参数的存储过程如何修改,,?
2,c#里怎样写来取得这个存储过程输出的参数赋值给一个label.Text

谢谢各位了啊,,


------解决方案--------------------
1:
CREATE PROCEDURE [AddOppt]
@name varchar(20),@chengwei varchar(10), @company varchar(50),

@tel varchar(20), @addr varchar(100),

@country varchar(50),

@outputOpptid int output

AS
...
set @outputOpptid = scope_identity()
...

2:
定义一个Parameter来取这个输出的值,比如:
Sqlparameter par = new SqlParameter(@outputOpptid, SqlDbType.Int);
par.Direction = ParameterDirection.Output;
...
ExecuteSql
...
object outValue = par.Value;
------解决方案--------------------
CREATE PROCEDURE [AddOppt]
@name varchar(20),@chengwei varchar(10), @company varchar(50),

@tel varchar(20), @addr varchar(100),

@country varchar(50)

AS
insert OpptFeedback

(name,chengwei,company,tel,addr,country) values

(@name,@chengwei,@company,@tel,@addr,@country)

/*加这一行*/

return (select @@identity)

GO


取存储过程返回的int值

public override int exeSP(string strSP,string[] strParams,object[] strValues)
{
   SqlCommand cmd=new SqlCommand();
   cmd.Connection=this.conn ;
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText=strSP;
   if(inTransaction)
     cmd.Transaction=trans;
   if((strParams!=null)&&(strParams.Length!=strValues.Length) )
return -1;
SqlParameter param;
param=cmd.Parameters.Add( "@RtnVal ",SqlDbType.Int);
param.Direction=ParameterDirection.ReturnValue;
   if(strParams!=null)
{
   for(int i=0;i <strParams.Length;i++)
cmd.Parameters.Add(strParams[i],strValues[i]);
}
  cmd.ExecuteNonQuery();
param=cmd.Parameters[ "@RtnVal "];
return Int32.Parse(param.Value.ToString());
}
------解决方案--------------------
sp后面加:
RETURN scope_identity();

SqlParameter加一个参数@ReturnValue,(名字任意), Direction = ParameterDirection.ReturnValue

sp执行完成后,取值
int id = cmd.Parameters[ "@ReturnValue "].Value;