2013-03-17 47 views
0

我在我的aspx页面中获得了以下sql查询来更新我在phpmyadmin中的数据库。我的软件是的Visual Web Developer 2010asp.net存储数据库中用户是数据库时得分的总和

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

我只是将你的“upsert”代码包装到存储过程中,并传递用户标识和分数递增/递减。

您当前的代码不更新比分,但简单地覆盖它不管你进入它

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

日Thnx FO的答复,但我在哪里都放在我的aspx文件这个存储过程? – Sybren 2013-03-17 08:18:17

+0

当我在mysql命令行输入这个命令时,它会显示:ERROR 1046(3D000):没有选择数据库? – Sybren 2013-03-17 14:36:57

+0

我没有意识到你正在使用MySQL,因此请标记你的问题。我的代码将在SQL Server中创建一个存储过程;不知道你如何在MySQL – 2013-03-18 01:48:34