C#-接受参数并返回值的SQL过程

C#-接受参数并返回值的SQL过程,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我正在为一个类编写一个应用程序,我有用于插入、删除、更改和查看的工作存储过程 但这个函数接受一个参数,然后返回另一个值。如何在代码中实现这一点 这是SQL: USE [ADK_DB] GO /****** Object: StoredProcedure [IO].[usp_ukupno_donacija_prema_tipu_krg] Script Date: 3/31/2020 6:52:14 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDE

我正在为一个类编写一个应用程序,我有用于插入、删除、更改和查看的工作存储过程

但这个函数接受一个参数,然后返回另一个值。如何在代码中实现这一点

这是SQL:

USE [ADK_DB]
GO
/****** Object:  StoredProcedure [IO].[usp_ukupno_donacija_prema_tipu_krg]    Script Date: 3/31/2020 6:52:14 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [IO].[usp_ukupno_donacija_prema_tipu_krg]
@krg_id smallint
as
begin
declare @sum int
select @sum = [IO].[fn_broj_donacija_tip_krg](@krg_id)
print @sum
end;
这就是我的代码:

    public void DohvatiDonacijePoKG(string krgId)
    {
        SqlCommand command = new SqlCommand("[IO].[usp_ukupno_donacija_prema_tipu_krg]", cnn);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@krg_id", SqlDbType.VarChar)).Value = krgId;

        // Return the output from the database

        try
        {
            command.ExecuteNonQuery();
            MessageBox.Show("Success.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        catch (Exception ex)
        {
            MessageBox.Show("Execption: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

一种方法是使用输出参数:

ALTER procedure [IO].[usp_ukupno_donacija_prema_tipu_krg]
@krg_id smallint, @sum INT OUT
as
begin
   set @sum = [IO].[fn_broj_donacija_tip_krg](@krg_id);
end;
存储过程可以通过以下几种方式返回值:

  • 选择结果集
  • 输出参数
  • 返回。。。;(仅单个INT值)
  • 打印消息(您需要截取它-)
在C#中,可以像下面一样传递输出参数。你可以参考


好的,你知道我是如何将这个输出输出到我的应用程序的吗?@SebastianMarjanović
command.Parameters.Add(“@sum”,SqlDbType.Int)。Direction=ParameterDirection.output我甚至会说“方法是使用输出参数”,而不仅仅是一种方法。是的,理论上,您可以使用建议的其他方法返回标量值,但不应该:。(这是一篇老文章,但它所说的一切在今天仍然是正确的)RETURN应该用于返回执行状态。无论是成功还是失败,还是其他状态。如果我们想返回结果集,理想情况下,我们必须使用输出参数(如您所建议的)或选择ResultSetHow do
cmd
与问题相关?与
命令
相同吗?@PeterMortensen此答案仅显示如何仅在C#中使用输出参数。与另一个答案一样,它只展示了如何在SQLServer中声明输出参数。
cmd.Parameters.Add("@Guid", SqlDbType.VarChar, 100);
cmd.Parameters["@Guid"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@ClientName", SqlDbType.VarChar, 100);
cmd.Parameters["@ClientName"].Direction = ParameterDirection.Output;