-2

Paymentsテーブル内の 1 つの行を更新し、この行のいくつかの列の値を取得したい

public void update(Int64 id , int status)
{
   dal.DoCommand("Payments_Update", new SqlParameter("@Id", id), new SqlParameter("@Status", status));

   // I WANT GET p_amount , p_credit ,p_debtor OF tbl_Payments HERE
   // 
}

DoCommand上記では、DALクラスの関数を呼び出します

public void DoCommand(string sqlCmd, params SqlParameter[] parms)
{
   command.CommandText = sqlCmd;
   command.CommandType = CommandType.StoredProcedure;
   command.Parameters.Clear();
   command.Parameters.AddRange(parms);
   command.ExecuteScalar();
}

そしてPayments_update手順です

alter procedure dbo.Payments_Update
   (@Id bigint,
    @Status int)
as
   update tbl_Payments
   set p_status = @Status
   where p_id = @Id

   return

これらは私のpaymentsテーブルの列です

p_amount int, p_creditor int, p_debtor int
4

2 に答える 2

5

更新後に必要な列を選択するように SP (ストアド プロシージャ) を単純に変更してみませんか。

alter procedure dbo.UpdateAndGetPaymentDetails
   (@Id bigint,
    @Status int)
as
   update tbl_Payments
   set p_status = @Status
   where p_id = @Id
   select p_amount, p_creditor, p_debtor
   from dbo.tbl_Payments
   where p_id = @Id

更新: @i-one が彼の回答で示唆したように、 sql output 句を使用してワンパスで実行することもできます。

alter procedure dbo.UpdateAndGetPaymentDetails
    (@Id bigint,
    @Status int)
as
    update tbl_Payments
    set p_status = @Status
    output inserted.p_amount, inserted.p_creditor, inserted.p_debtor
    where p_id = @Id

UpdateAndGetPaymentDetailsまた、現在運用中のため、SP の名前を に変更することをお勧めしupdateますselect

クエリによって返された結果セットの最初の行の最初の列のみを返しながらレコードを選択/返したいため、後で、現在使用しているSqlDataReaderの代わりにメソッドを使用する必要があります。例えば:ExecuteScalarExecuteScalar

    SqlCommand command = new SqlCommand(queryString, connection);
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}", reader[0]));
    }
于 2013-07-06T08:53:39.450 に答える