为什么我的ExecuteNonQuery()在C#中返回0

时间:2014-02-11 01:13:45

标签: c# sqldatareader executenonquery

我正在尝试使用新的TeamID更新播放器记录,但它没有更新,请提示

2 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:2)

这两行:

Updatecmd.Parameters["@Team_ID"].Value = PlayerTeam_ID;
Updatecmd.Parameters["@Person_ID"].Value = Player_ID;

最初将值设置为变量PlayerTeam_IDPlayer_ID。在read循环中,您正在更新变量PlayerTeam_IDPlayer_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();
}