有下面这样一个存储过程:
CREATE PROCEDURE dbo.InsertST
@name nvarchar(32)
AS
Insert ST (name)
SELECT @NAME
--
返回主键值
RETURN @@IDENTITY
现在想在程序中,获取这个存储过程的返回值,来得到当前插入记录的主键,该如何做?
对于想获取当前插入记录的主键的方法无外呼两种情况,1.把生成的主键值作为存储过程的一个输出参数,这个很容易,2. 把生成的主键作为存储过程的反回值,现在的情况属于第二种。
在c#的中,当我们要给存储过程传递参数的时候,默认的输入参数,如果要指定输出参数,则必须设置ParameterDirection参数,而该参数有四种情况:
ParameterDirection
.Input; 输入参数
ParameterDirection
.InputOutput; 输入输出参数
ParameterDirection
.Output; 输出参数
ParameterDirection
.ReturnValue; 返回值
我们知道了如何通过输出参数或者主键,到这而应该知道了如何通过返回值获取主键值了吧,与输入参数不同的就是在这里设置参数的值为ReturnValue.
..........
SqlCommand cmd = new SqlCommand();
cmd.Connection = db.m_sqlConn;
cmd.CommandText = "[DeleteUseridByID]";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@userid", SqlDbType.Int, 0));
SqlParameter rtnval = cmd.Parameters.Add("rval",SqlDbType.Int,0);
rtnval.Direction = ParameterDirection.ReturnValue;
cmd.Connection = db.m_sqlConn;
cmd.CommandText = "[DeleteUseridByID]";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@userid", SqlDbType.Int, 0));
SqlParameter rtnval = cmd.Parameters.Add("rval",SqlDbType.Int,0);
rtnval.Direction = ParameterDirection.ReturnValue;
cmd.Parameters[0].Value = 10;
int
nRes = cmd.ExecuteNonQuery();
int
rrr = int.Parse(rtnval.Value.ToString());
..................