2011-04-01 26 views
0

我有一个包含用户名和“点”的数据库。我需要随意增加“积分”。我把表连接到一个sqldatasource。通过asp.net在sql表中增加一个条目1

这里是我当前的代码:

With Users 
     .UpdateCommand = "UPDATE Users SET points = points + 1" 
     .Update() 
    End With 

这个伟大的工程,除了,而不是仅仅改变由查询字符串指定的用户名进入,它改变了所有条目,并增加了一个。

在SqlDataSource具有下列选择命令:

SelectCommand="SELECT * FROM [Users] WHERE ([username] = @username)" 

此命令使它,以便仅显示与查询字符串指定的用户名的条目。这真是我第一次尝试SQL。任何想法或解决方案,将不胜感激。

- 编辑 -

感谢您的帮助俄德,这里是我的最终解决方案,工作 :)

With Users 
    .UpdateParameters.Add(New Parameter("username", System.Data.DbType.String, My.Request.QueryString("username"))) 
    .UpdateCommand = "UPDATE Users SET points = points + 1 WHERE ([username] = @username)" 
    .Update() 
End With 
+0

我不在你的命令中看到一个WHERE,那它应该怎么知道它有什么更新?即使SelectCommand指定用户名,Update命令也不会。 – Hallaghan 2011-04-01 13:04:55

+0

是的,这就是为什么我问,这是我第一次使用实际的SQL命令。 – FreeSnow 2011-04-01 13:12:50

回答

4

您需要指定只有该用户的行应该是更新:

.UpdateCommand = "UPDATE Users SET points = points + 1 WHERE ([username] = @username)" 

如果未指定WHERE子句,则正如您所见,将应用于所有现有行。


编辑:

这是如何添加一个用户名参数的例子:

.UpdateCommand.Parameters.Add("@username", SqlDbType.NVarChar, 40, "The User Name"); 
+0

噢,好的。我想这是有道理的。谢谢! – FreeSnow 2011-04-01 13:11:42

+0

它现在抛出这个异常:'必须声明标量变量“@username”。“ – FreeSnow 2011-04-01 13:14:23

+1

@DalexL - 您需要将用户名作为参数传递,与“SelectCommand”完成的方式相同。 – Oded 2011-04-01 13:16:44

1

where子句添加到您的更新命令:

UpdateCommand = "UPDATE Users SET points = points + 1 WHERE ([username] = @username)" 
+0

你先回答了这个问题,但是在这里解释了一点。这是一个投票。 :) – FreeSnow 2011-04-01 13:12:22