C#调用有有参有返的存储过程

(1)在SQL Server中建立如下的存储过程:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GetNameById]
 @studentid varchar(8),
 @studentname nvarchar(50) OUTPUT
AS
BEGIN
 SELECT @studentname=studentname FROM student
    WHERE studentid=@studentid
 if @@Error<>0
  RETURN -1
 else
  RETURN 0 
END
该存储过程的作用是根据学号,获取姓名,并使用RETURN关键字来返回值。

如果要在SQL Server的查询分析器中执行该存储过程,对应的SQL语句如下:

Declare  @studentname nvarchar(50),
exec GetNameById @studentname output,@id=2
select @studentname

select @@Error

(2)编写C#代码:

           using (SqlConnection conn = new SqlConnection(connStr))
            {
                try
                {
                    SqlCommand cmd = new SqlCommand("GetNameById", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@studentid", "09888888");  //给输入参数赋值
                    SqlParameter parOutput =cmd.Parameters.Add("@studentname", SqlDbType.NVarChar, 50);  //定义输出参数
                    parOutput.Direction = ParameterDirection.Output;  //参数类型为Output
                    SqlParameter parReturn = new SqlParameter("@return", SqlDbType.Int);
                    parReturn.Direction = ParameterDirection.ReturnValue;   //参数类型为ReturnValue                    cmd.Parameters.Add(parReturn);
                    conn.Open();
                    cmd.ExecuteNonQuery();
                    MessageBox.Show(parOutput.Value.ToString());   //显示输出参数的值
                    MessageBox.Show(parReturn.Value.ToString());  //显示返回值
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

上面的@return是临时参数,用于获取存储过程的返回值,这个参数名称可以是任意的。

原文地址:https://www.cnblogs.com/Gold-fangjin/p/5587769.html