2014-02-11 4 views
0

Я пытаюсь обновить плеер записи с новым TeamID, но это не обновление, любые намеки, пожалуйста,Почему мой ExecuteNonQuery() возвращает 0 в C#

+0

Вы уверены, что PersonID существует? –

+2

Вы никогда не обновляете параметры команды Update. Вы устанавливаете их один раз в начале - изменение переменной 'Player_ID' не изменяет значение в параметре. – Tim

ответ

3

ExecuteNonQuery возвращает количество затронутых строк. В вашей базе данных нет идентификатора Person_ID со значением 0.

Похоже, что вы можете захотеть, чтобы переместить большую часть вашего кода внутри цикла в то время, как большая часть этого

SqlCommand Updatecmd = new SqlCommand("UPDATE Persons SET [email protected]_ID WHERE [email protected]_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; 
+0

Что это за ограничение? – Ghost

+0

Имеет ли идентификатор команды, который вы пытаетесь обновить, чтобы существовать в командах? Вам нужно предоставить кучу больше информации, чтобы я мог помочь с этим. – Ghost

+0

@Fruits - Возможно, это будет порядок работы. '+' оценивается до '%' и '*' (как и обычная математика). Вы можете ожидать, что ваш код будет выполнять модуль на PlayersCount, добавьте 4, а затем умножьте на Division_ID, но на самом деле происходит 4, добавлено к 4, а затем PlayersCount - модуль 8, умноженный на DivisionID. Если вы ожидали, что прямо слева направо, вы можете использовать круглые скобки: '(PlayersCount% 4) + 4 * Division_ID'. Каковы ценности, которые вы ожидаете? – Tim

2

Эти две строки:

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(); 
}