2013-07-06 35 views
-2

我想在Payments表更新一行,並獲得該行從表中返回列從SQL Server更新表時

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 
    // 
} 

的幾個列值在上面我所說的DAL類的DoCommand功能

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 
+1

請提供屏幕截圖的確切錯誤。別人很容易理解你的問題。 –

+0

不,我沒有錯誤,我想要更新函數中的p_amount和p_amount和p_amount的值 –

+0

@Mohammadhossein請注意您的複製粘貼。你已經粘貼了3次p_amount。 –

回答

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 

更新:作爲@我,一個在他的回答表明,它也可以做到這一點在使用sql output clause一通,看看:

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 

此外,我會建議您將您的SP名稱更改爲UpdateAndGetPaymentDetails,因爲您現在正在執行updateselect操作。

之後,你應該用SqlDataReader方法,而不是你現在正在使用的ExecuteScalar工作,因爲你想選擇/返回記錄,而ExecuteScalar只有在返回的結果集返回第一行的第一列查詢。例如:

SqlCommand command = new SqlCommand(queryString, connection); 
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     Console.WriteLine(String.Format("{0}", reader[0])); 
    } 
0

而是更新,然後選擇,你可以做一個合格

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 

然後得到使用SqlDataReader作爲已經建議值。