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

C# 为什么我的ExecuteNonQuery()在C中返回0#,c#,sqldatareader,executenonquery,C#,Sqldatareader,Executenonquery,我正在尝试使用新的TeamID更新玩家记录,但它没有更新,任何提示请返回受影响的行数。数据库中没有值为0的人员ID 看起来您可能希望在while循环中移动大部分代码,就像下面的大多数一样 SqlCommand Updatecmd = new SqlCommand("UPDATE Persons SET TeamID=@Team_ID WHERE PersonID=@Person_ID", UpdateCon); Updatecmd.Parameters.Add("@Team_ID", SqlDb

我正在尝试使用新的TeamID更新玩家记录,但它没有更新,任何提示请返回受影响的行数。数据库中没有值为0的人员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;

ExecuteNonQuery
返回受影响的行数。数据库中没有值为0的人员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;
这两条线:

Updatecmd.Parameters["@Team_ID"].Value = PlayerTeam_ID;
Updatecmd.Parameters["@Person_ID"].Value = Player_ID;
最初将值设置为变量
PlayerTeam\u ID
Player\u ID
。在
read
循环中,您正在更新变量
PlayerTeam\u ID
Player\u 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();
}
这两条线:

Updatecmd.Parameters["@Team_ID"].Value = PlayerTeam_ID;
Updatecmd.Parameters["@Person_ID"].Value = Player_ID;
最初将值设置为变量
PlayerTeam\u ID
Player\u ID
。在
read
循环中,您正在更新变量
PlayerTeam\u ID
Player\u 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();
}

您确定PersonID存在吗?您从不更新update命令的参数。您在开始时设置了一次-更改变量
Player\u ID
不会更改参数中的值。您确定PersonID存在吗?您从不更新更新命令的参数。在开始时设置一次-更改变量
Player\u ID
不会更改参数中的值。这是什么约束?您尝试更新的团队ID是否存在于团队中?您需要为我提供更多的信息,以便我能够帮助您完成这项任务。@Fruits-这可能是一个操作顺序问题<代码>+在
%
*
之前计算(就像普通数学一样)。您可能希望您的代码对PlayersCount进行模运算,加上4,然后乘以除法ID,但实际情况是将4加上4,然后PlayersCount是模8,乘以除法ID。如果希望从左向右,可以使用括号:
(PlayersCount%4)+4*除法ID
。您期望的值是什么?约束是什么?您试图更新的团队id是否存在于团队中?您需要为我提供更多的信息,以便我能够帮助您完成这项任务。@Fruits-这可能是一个操作顺序问题<代码>+在
%
*
之前计算(就像普通数学一样)。您可能希望您的代码对PlayersCount进行模运算,加上4,然后乘以除法ID,但实际情况是将4加上4,然后PlayersCount是模8,乘以除法ID。如果希望从左向右,可以使用括号:
(PlayersCount%4)+4*除法ID
。您期望的值是什么?