Как использовать параметр вывода в хранимой процедуре в C# - PullRequest
0 голосов
/ 20 марта 2020

Прежде всего, я провел много исследований по этой теме c, но, к сожалению, я не нашел, что работает для меня. Это моя хранимая процедура

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
    }

Как я могу это сделать?
Заранее спасибо

1 Ответ

1 голос
/ 20 марта 2020

Вы можете получить значение параметра out в вашем методе AddPaymentTracking, но не в btnSave_Click, если только вы не выставите его из метода AddPaymentTracking в качестве выходного (или ref) параметра.

    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);

        . . .
        . . .
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...