Массовое обновление таблицы mysql

#c# #mysql

#c# #mysql

Вопрос:

У меня есть список из 1933 имен пользователей, которые должны быть удалены в таблице mysql (измените удаленное поле с 0 на 1). Я вставляю список, разделенный запятыми (имя пользователя, реальное имя), в поле списка и использую оператор foreach для отправки каждого имени пользователя, группы реальных имен в команду обновления в статическом классе. Когда я запускаю его, я не получаю никаких ошибок, но ни одна из строк пользователей не обновляется. Я делаю что-то не так, но я не уверен, в чем проблема. Пожалуйста, просмотрите мой код ниже и дайте мне знать, если вы обнаружите что-то неправильное, чего я не вижу.

 private void button1_Click(object sender, EventArgs e)
    {
        int i = 0;
        try
        {
            if (listBox1.Items.Count > 0)
            {
                foreach (string s in listBox1.Items)
                {
                    Cursor.Current = Cursors.WaitCursor;
                    string[] sname = s.Split(',');
                    Data.RemoveUser(sname[0].ToString(), sname[1].ToString());
                    i  ;
                    label3.Text = i.ToString();
                }
            }
            else
                MessageBox.Show("No user names found. Please paste a list of names to be deleted.");
            Cursor.Current = Cursors.Defau<
            MessageBox.Show(i.ToString()   " users set to deleted.");
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }


public static void RemoveUser(string UserName, string FullName)
    {
        MySqlConnection conn = new MySqlConnection(constr);

        try
        {
            conn.Open();

            string qry = "Update host_user set deleted = 1 where username = @username and name = @fname";
            MySqlCommand cmd = new MySqlCommand(qry, conn);

            cmd.Parameters.AddWithValue("@username", UserName);
            cmd.Parameters.AddWithValue("@fname", FullName);
            cmd.ExecuteNonQuery();                    

            conn.Close();
        }
        catch (MySqlException e)
        {
            if (conn != null) conn.Close();
            throw e;
        }
    }
  

Комментарии:

1. установите точку останова в cmd. ExecuteNonQuery() и когда он прерывается на нем, в немедленном окне введите «?cmd. CommandText» Это допустимый оператор mysql?

2. Вам не нужно экранировать «имя пользователя» и / или «имя», не так ли … это зарезервированные слова?

3. И я бы предпочел, чтобы этот параметр добавлял конструкцию: cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = UserName;

Ответ №1:

Когда вы делаете:

 string[] sname = s.Split(',');
  

У вас заканчиваются пробелы по обе стороны от вашего имени и фамилии? Если бы ваш вклад был похож на:

«Джон, Доу»

Вы бы в конечном итоге выполнили поиск по «John» и «Doe».

Если это так, позвоните .Обрезать () эти строки перед передачей, передавая их в RemoveUser().

Комментарии:

1. Или разделение, при ", " котором можно было бы избежать ошибок в случае, если имена имели фактические пробелы в базе данных.