#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. Или разделение, при
", "
котором можно было бы избежать ошибок в случае, если имена имели фактические пробелы в базе данных.