Как выполнить запрос на обновление во время работы MysqlDataReader - PullRequest
0 голосов
/ 16 июня 2020

Я использую консольное приложение 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, не заставляя меня запускать программу несколько раз. Может ли кто-нибудь подсказать, как мне исправить код для этого?

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

U может определить новый объект подключения для этого

int currentPoints;
int shudhavePoints;
string email;
MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQLConnectionString"].Connection
String);
MySqlConnection con1 = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQLConnectionString"].Connection
String);
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", con1);
            cmd2.Parameters.AddWithValue("@cp", shudhavePoints);
            cmd2.Parameters.AddWithValue("@email",email);
            cmd2.ExecuteNonQuery();
        }
    }
    Console.ReadLine();
}
else
{
    Console.WriteLine("I read nothing!");
    Console.ReadLine();
}
0 голосов
/ 16 июня 2020
    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();
            }

           if(!rdr.read())
             {
                Console.WriteLine("Update query not working!!!");
             }
           else
             {
                //user_email
                string usermail = Convert.ToString(user_email);                   
                usermail  = rdr[0].ToString();
                Console.WriteLine("Username: {0}", usermail.ToString());

                //meta_value AS 'Current Points'
                string metavalue = Convert.ToString(meta_value);                   
                metavalue  = rdr[1].ToString();
                Console.WriteLine("metavalue: {0}", metavalue.ToString());

                //meta_value AS 'point'
                string points  = Convert.ToString(point);                   
                points  = rdr[2].ToString();
                Console.WriteLine("point: {0}", points.ToString());

                Console.ReadLine();
             }

        }
        Console.ReadLine();
    }
    else
    {
        Console.WriteLine("I read nothing!");
        Console.ReadLine();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...