【问题标题】:How To Use Output Parameter In Stored Procedure In C#如何在 C# 的存储过程中使用输出参数
【发布时间】:2020-03-20 18:25:23
【问题描述】:

首先,我对这个主题进行了大量研究,但不幸的是我没有找到适合我的方法。 这是我的存储过程

USE [SIM]
GO
Create Proc [dbo].[AddPaymentTracking]

       @NPaymentRequest nvarchar(50),
       @DatePayment date,
       @id int out
AS
INSERT INTO [dbo].[PaymentTracking]
       ([NPaymentRequest]
       ,[DatePayment])

 VALUES
       (@NPaymentRequest, 
       @DatePayment)

Set @id=@@IDENTITY

这是我的 c# 类代码

public async Task AddPaymentTracking(string NPaymentRequest, DateTime DatePayment)
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        await Task.Run(() => DAL.Open()).ConfigureAwait(false);
        SqlParameter[] param = new SqlParameter[3];

        param[0] = new SqlParameter("@NPaymentRequest", SqlDbType.NVarChar, 50)
        {
            Value = NPaymentRequest
        };

        param[1] = new SqlParameter("@DatePayment", SqlDbType.Date)
        {
            Value = DatePayment
        };

        param[2] = new SqlParameter("@id", SqlDbType.Int);
        param[2].Direction = ParameterDirection.Output;



        await Task.Run(() => DAL.ExcuteCommande("AddPaymentTracking", param)).ConfigureAwait(false);
        DAL.Close();

    }

这是我的 c# 表单代码

private async  void btnSave_Click(object sender, EventArgs e)
    {
     await supply.AddPaymentTracking(txtNPaymentRequest.Text, Convert.ToDateTime(txtDatePayment.EditValue, CultureInfo.CurrentCulture)).ConfigureAwait(true);  
     //int output = Get output Parameter
    }

我该怎么做?
提前致谢

【问题讨论】:

  • 您可以在 AddPaymentTracking 方法中获取 out 参数值,但不能在 btnSave_Click 中获取,除非您还从 AddPaymentTracking 方法中将其作为输出参数公开。在DAL.ExcuteCommande 之后尝试:var outVal = param[2].Value.. 在您的AddPaymentTracking 方法中添加一个 out(或 ref)参数,并在返回之前将此值分配给它。
  • 你说,“我对这个主题做了很多研究,但不幸的是我没有找到适合我的东西”,但是当我在谷歌上搜索你的主题标题时,其中一个第一个结果是:Example on how to use output parameter in stored procedure in C#。那对你不起作用吗?我没有看到您的代码试图访问 out 参数值的位置。
  • @RufusL 不是。事件处理程序btnSave_Click中有注释://int output = Get output Parameter
  • @OguzOzgul 非常感谢你能不能把它写在答案部分,这样我就可以回答我的问题了

标签: c# sql-server winforms


【解决方案1】:

您可以在 AddPaymentTracking 方法中获取 out 参数值,但不能在 btnSave_Click 中获取,除非您还从 AddPaymentTracking 方法中将其作为输出(或参考)参数公开。

    public async Task AddPaymentTracking(string NPaymentRequest, DateTime DatePayment, out int newRecordId)
    {
        . . .
        . . .

        await Task.Run(() => DAL.ExcuteCommande("AddPaymentTracking", param)).ConfigureAwait(false);

        newRecordId = (int)param[2].Value;
        DAL.Close();
    }

这就是使用新签名调用该方法的方式:

    private async void btnSave_Click(object sender, EventArgs e)
    {
        int output;
        await supply.AddPaymentTracking
        (
            txtNPaymentRequest.Text,
            Convert.ToDateTime(txtDatePayment.EditValue, CultureInfo.CurrentCulture), 
            out output
        ).ConfigureAwait(true);

        . . .
        . . .
    }

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多