SQL Server存储过程返回参数

-- 测试 SQL Server 存储过程的输出机制
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pTest' AND type = 'P')
   DROP PROCEDURE pTest
GO
CREATE PROCEDURE pTest
  @fBZ             VARCHAR(200),       -- 备注
  @fOutput         VARCHAR(200) OUTPUT -- 返回信息
AS
BEGIN
  SET @fOutput = @fBZ + '->传出的字符'
  RETURN 127
END

-- 测试语句
DECLARE @foutput VARCHAR(200)
BEGIN
  -- 调用的示例, 需要加 output 关键字
  EXEC dbo.pTest '传入的字符', @foutput output

  -- 查看返回的结果
  SELECT @foutput
END
运行结果如下:
(无列名)
传入的字符->传出的字符

下面是通过C#调用存储过程的方法

public virtual void Call_sp()
{
    SqlConnection cnn = new SqlConnection(gsc.connString);
    cnn.Open();
    string sql = "pTest";
    SqlCommand cmd = new SqlCommand(sql, cnn);

    /** 将Command执行类型改为存储过程的方式,默认为Text **/
    cmd.CommandType = CommandType.StoredProcedure;

    /** 传递一个输入参数,需要赋值 **/
    SqlParameter sp = cmd.Parameters.Add("fBZ", SqlDbType.VarChar);
    sp.Value = "传入的字符";

    /** 定义一个输出参数,不许需要赋值。Direction用来描述参数的类型 **/
    /** Direction默认为输入参数,还有输出参数和返回值 **/
    sp = cmd.Parameters.Add("@fOutput", SqlDbType.VarChar, 200);

    /** 定义过程的返回值参数,过程执行完之后,将把过程的返回值
        赋给myreturn的Parameters赋值 **/
    sp = cmd.Parameters.Add("SQLProcedure_Return", SqlDbType.Int);
    sp.Direction = ParameterDirection.ReturnValue;

    /** 使用SqlDataAdapter将自动完成数据库的打开和关闭过程,
        并将执行t-sql语句或存储过程
        如果存储过程只是执行相关操作,如级联删除或者更新,
        使用sqlcommand的execute方法即可 **/
    try
    {
        //在执行完存储过程之后,可得到输出参数
        cmd.ExecuteNonQuery();

        string myout = cmd.Parameters["@foutput"].Value.ToString();
        //打印输出参数
        MessageBox.Show("打印输出参数:" + myout);

        myout = cmd.Parameters["SQLProcedure_Return"].Value.ToString();
        //打印存储过程返回值
        MessageBox.Show("存储过程返回值:" + myout);
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
    finally
    {
        cnn.Close();
    }
}

运行结果将分别显示:
这里写图片描述

这里写图片描述

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页