【发布时间】:2014-02-11 01:13:45
【问题描述】:
我正在尝试使用新的 TeamID 更新玩家记录,但它没有更新,请提供任何提示
【问题讨论】:
-
您确定 PersonID 存在吗?
-
您永远不会更新更新命令的参数。您在开始时设置一次 - 更改变量
Player_ID不会更改参数中的值。
标签: c# sqldatareader executenonquery
我正在尝试使用新的 TeamID 更新玩家记录,但它没有更新,请提供任何提示
【问题讨论】:
Player_ID 不会更改参数中的值。
标签: c# sqldatareader executenonquery
ExecuteNonQuery 返回受影响的行数。您的数据库中没有值为 0 的 Person_ID。
看起来您可能希望将大部分代码移动到您的 while 循环中,就像大多数这样
SqlCommand Updatecmd = new SqlCommand("UPDATE Persons SET TeamID=@Team_ID WHERE PersonID=@Person_ID", UpdateCon);
Updatecmd.Parameters.Add("@Team_ID", SqlDbType.VarChar);
Updatecmd.Parameters.Add("@Person_ID", SqlDbType.VarChar);
Updatecmd.Parameters["@Team_ID"].Value = PlayerTeam_ID;
Updatecmd.Parameters["@Person_ID"].Value = Player_ID;
应该放在后面
PlayersCount++;
Division_ID=reader.GetInt32(1);
Player_ID = reader.GetInt32(0);
PlayerTeam_ID = PlayersCount % 4 + 4 * Division_ID;
【讨论】:
+ 在 % 和 * 之前评估(就像常规数学一样)。您可能希望您的代码对 PlayersCount 进行模数,加 4,然后乘以 Division_ID,但实际发生的是 4 加 4,然后 PlayersCount 是模数 8,乘以 DivisionID。如果您希望从左到右直接,您可以使用括号:(PlayersCount % 4) + 4 * Division_ID。您期望的值是什么?
这两行:
Updatecmd.Parameters["@Team_ID"].Value = PlayerTeam_ID;
Updatecmd.Parameters["@Person_ID"].Value = Player_ID;
最初将值设置为变量PlayerTeam_ID 和Player_ID。在您的read 循环中,您正在更新变量PlayerTeam_ID 和Player_ID,但您没有更新参数中的值。您应该更新参数的值,如下所示:
while (reader.Read())
{
PlayersCount++;
Division_ID=reader.GetInt32(1);
Player_ID = reader.GetInt32(0);
PlayerTeam_ID = PlayersCount % 4 + 4 * Division_ID;
Updatecmd.Parameters["@Team_ID"].Value = PlayerTeam_ID;
Updatecmd.Parameters["@Person_ID"].Value = Player_ID;
UpdateCon.Open();
int intQuery = Updatecmd.ExecuteNonQuery();
ltlOutput.Text = intQuery.ToString();
UpdateCon.Close();
}
【讨论】: