2014-07-23 31 views
1

我正在使用查詢更新表上的列值,並且還使用以下方式在ASP.NET網站上檢索更新的值。有沒有什麼辦法可以使用單個查詢而不是下面的雙重查詢?使用sqlcommand檢索asp.net上更新的參數值

using (SqlConnection connection = new SqlConnection(connStr)){ 
    string updateUserQuery = "Update user_master set login_failed_attempts = login_failed_attempts + 1 where id = @id; Select @login_failed = login_failed_attempts from user_master where id = @id"; 
    SqlCommand cmd = new SqlCommand(updateUserQuery, connection); 
    cmd.Parameters.Add("@id", SqlDbType.Int).Value = user_id; 
    SqlParameter outputIdParam = new SqlParameter("@login_failed", SqlDbType.Int) 
    { 
     Direction = ParameterDirection.Output 
    }; 
    cmd.Parameters.Add(outputIdParam); 
    cmd.ExecuteNonQuery(); 
    int loginFailedAttempts = int.Parse(outputIdParam.Value.ToString()); 
} 

更新後的代碼在Matthew的回答後給出。

string updateUserQuery = "Update user_master set login_failed_attempts = login_failed_attempts + 1 OUTPUT INSERTED.login_failed_attempts where id = @id"; 
SqlCommand cmd = new SqlCommand(updateUserQuery, connection); 
cmd.Parameters.Add("@id", SqlDbType.Int).Value = user_id; 
int loginFailedAttempts = (int)cmd.ExecuteScalar(); 

回答

2

使用OUTPUT子句。

UPDATE user_master 
SET login_failed_attempts = login_failed_attempts + 1 
OUTPUT INSERTED.login_failed_attempts 
WHERE id = @id 

然後改變你的ExecuteNonQueryExecuteScalar,並從相應的使用結果。

您也可以將其更改爲ExecuteReader並撤回多條記錄,但假設您不想使用@id

+0

那就是我在找的東西。謝謝。 – gnaanaa