我在我的aspx页面中获得了以下sql查询,以便在phpmyadmin中更新我的数据库。我的软件是Visual Web developer 2010。
cmd = connection.CreateCommand();
cmd.CommandText = "UPDATE (userscore) SET score = @score WHERE username = @username";
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@score", userscore);
var numRowsAffected = cmd.ExecuteNonQuery();
if (numRowsAffected == 0)
{
cmd.CommandText = "INSERT INTO userscore (username, score)VALUES(@username, @score)";
cmd.ExecuteNonQuery();
}
当特定用户名尚未在数据库中时,此查询会在数据库中添加用户名加分数。这就是我想要的。但是当例如用户名admin在数据库中得分为-1时(在我的应用程序中你可以投票+1或-1)并且他获得+1的另一次投票,我想存储值的总和(在此在数据库中将case -1加+1 = 0)作为新分数,并删除旧值,在本例中为-1。
答案 0 :(得分:0)
我只需将“upsert”代码包装到存储过程中,然后传递userid和分数增量/减量。
您当前的代码不会更新分数,而只是用您传入的内容覆盖它
create proc SetUserScore
@UserName nvarchar(100),
@ScoreChange int
AS
BEGIN
IF EXISTS(SELECT 1 FROM userscore WHERE username = @UserName)
BEGIN
UPDATE userscore
SET score = score + @ScoreChange
WHERE username = @UserName
END
ELSE
BEGIN
INSERT INTO userscore (username, score)VALUES(@username, @score)
END
END