Я использую консольное приложение C# для обновления таблицы с большим количеством строк на основе значения двух столбцов внутри MySQL. Ниже приведен код, который я пытался обновить в таблице. Можно ли выполнить обновление во время загрузки данных, пока l oop, или мне нужно использовать другой способ для sh this?
int currentPoints;
int shudhavePoints;
string email;
MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQLConnectionString"].ConnectionString);
con.Open();
MySqlCommand cmd1 = new MySqlCommand("SELECT user_email, meta_value AS 'Current Points', point FROM wp_usermeta", con);
MySqlDataReader rdr = null;
rdr = cmd1.ExecuteReader();
if(rdr.HasRows)
{
while(rdr.Read())
{
email = rdr.GetString(0);
currentPoints = Int32.Parse(rdr.GetString(1));
shudhavePoints = Int32.Parse(rdr.GetString(2));
if (currentPoints>shudhavePoints)
{
// I want to update here
MySqlCommand cmd2 = new MySqlCommand("UPDATE TABLE wp_usermeta SET meta_value = @cp WHERE user_email = @email", con);
cmd2.Parameters.AddWithValue("@cp", shudhavePoints);
cmd2.Parameters.AddWithValue("@email",email);
cmd2.ExecuteNonQuery();
}
}
Console.ReadLine();
}
else
{
Console.WriteLine("I read nothing!");
Console.ReadLine();
}
Прямо сейчас, если я выполню программы, данные не будут обновлено и отобразит ошибку
«Уже существует открытый DataReader, связанный с этим подключением, которое необходимо сначала закрыть».
Однако, если я закрою соединение, оно выполнит и обновит только самую первую строку, которая удовлетворяет правилу if-else. Я думаю, что должен быть способ запустить это в al oop, не заставляя меня запускать программу несколько раз. Может ли кто-нибудь подсказать, как мне исправить код для этого?