【问题标题】:Why does my ExecuteNonQuery() return 0 in C#为什么我的 ExecuteNonQuery() 在 C# 中返回 0
【发布时间】:2014-02-11 01:13:45
【问题描述】:

我正在尝试使用新的 TeamID 更新玩家记录,但它没有更新,请提供任何提示

【问题讨论】:

  • 您确定 PersonID 存在吗?
  • 您永远不会更新更新命令的参数。您在开始时设置一次 - 更改变量 Player_ID 不会更改参数中的值。

标签: c# sqldatareader executenonquery


【解决方案1】:

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;

【讨论】:

  • 约束是什么?
  • 您尝试更新的团队 ID 是否存在于 Teams 中?您需要为我提供更多信息才能帮助解决这个问题。
  • @Fruits - 这可能是操作顺序问题。 +%* 之前评估(就像常规数学一样)。您可能希望您的代码对 PlayersCount 进行模数,加 4,然后乘以 Division_ID,但实际发生的是 4 加 4,然后 PlayersCount 是模数 8,乘以 DivisionID。如果您希望从左到右直接,您可以使用括号:(PlayersCount % 4) + 4 * Division_ID。您期望的值是什么?
【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2013-01-26
    • 2017-07-04
    • 2023-03-21
    • 2018-07-06
    • 2011-12-28
    • 1970-01-01
    相关资源
    最近更新 更多