我使用查询更新表上的列值,并在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();
答案 0 :(得分:2)
使用OUTPUT
条款。
UPDATE user_master
SET login_failed_attempts = login_failed_attempts + 1
OUTPUT INSERTED.login_failed_attempts
WHERE id = @id
然后将您的ExecuteNonQuery
更改为ExecuteScalar
并相应地使用相应的结果。
您也可以将其更改为ExecuteReader
并撤回多条记录,但考虑到您使用@id
我假设您不想这样做。