C# 在C语言中如何在存储过程中使用输出参数#

C# 在C语言中如何在存储过程中使用输出参数#,c#,sql-server,winforms,C#,Sql Server,Winforms,首先,我对这个话题做了很多研究,但不幸的是,我没有找到适合我的。 这是我的存储过程 USE [SIM] GO Create Proc [dbo].[AddPaymentTracking] @NPaymentRequest nvarchar(50), @DatePayment date, @id int out AS INSERT INTO [dbo].[PaymentTracking] ([NPaymentRequest]

首先,我对这个话题做了很多研究,但不幸的是,我没有找到适合我的。 这是我的存储过程

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\u单击
,除非您也从
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);

        . . .
        . . .
    }

您可以在AddPaymentTracking方法中获取out参数值,但不可以在btnSave_单击中获取,除非您还将其作为输出参数从AddPaymentTracking方法中公开。在DAL.ExcuteCommande之后重试:
var outVal=param[2]。Value
。。在你的
AddPaymentTracking
方法中添加一个out(或ref)参数,并在返回之前将此值赋给它。你说,“我对这个主题做了很多研究,但不幸的是,我没有找到适合我的”,然而当我在谷歌上搜索你的主题标题时,第一个结果是:。那对你不管用吗?我看不出您的代码试图访问out参数值的位置。@RufusL不是。事件处理程序
btnSave\u Click
//int output=Get output Parameter
@OguzOzgul中有一条注释,非常感谢。请将其写在回答部分,以便我可以将其作为我问题的答案