using System; using System.Data; using System.Windows.Forms; using System.Xml.Linq; using MySql.Data.MySqlClient; namespace _0303RogovaNeshina { public partial class EditBooksForm : Form { string connStr = "Server=cfif31.ru;Port=3306;Database=ISPr25-21_NeshinaPV_0303;Uid=ISPr25-21_NeshinaPV;Pwd=ISPr25-21_NeshinaPV;"; private int bookId; // ID книги, которую редактируем // Конструктор принимает ID книги public EditBooksForm(int id) { InitializeComponent(); this.bookId = id; LoadAuthors(); // Загружаем список авторов LoadBookData(); // Загружаем данные конкретной книги } // Загрузка авторов в ComboBox (так же, как в AddForm) private void LoadAuthors() { try { using (MySqlConnection conn = new MySqlConnection(connStr)) { conn.Open(); string sql = "SELECT idauthor, name FROM author ORDER BY name"; MySqlCommand cmd = new MySqlCommand(sql, conn); MySqlDataAdapter da = new MySqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); cbAuthor.DataSource = dt; cbAuthor.DisplayMember = "name"; cbAuthor.ValueMember = "idauthor"; } } catch (Exception ex) { MessageBox.Show("Ошибка загрузки авторов: " + ex.Message); } } // Загрузка данных книги в поля формы private void LoadBookData() { try { using (MySqlConnection conn = new MySqlConnection(connStr)) { conn.Open(); string sql = "SELECT name, author_id, price FROM books WHERE idbooks = @id"; MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("@id", bookId); MySqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { tbName.Text = reader["name"].ToString(); cbAuthor.SelectedValue = reader["author_id"]; // Выбираем нужного автора tbPrice.Text = reader["price"].ToString(); } else { MessageBox.Show("Книга не найдена!"); this.Close(); } } } catch (Exception ex) { MessageBox.Show("Ошибка загрузки данных книги: " + ex.Message); } } private void btnSave_Click(object sender, EventArgs e) { // Проверки (как в AddForm) if (string.IsNullOrWhiteSpace(tbName.Text)) { MessageBox.Show("Введите название книги!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (cbAuthor.SelectedValue == null) { MessageBox.Show("Выберите автора!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } decimal price; if (!decimal.TryParse(tbPrice.Text, out price) || price <= 0) { MessageBox.Show("Введите корректную цену!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } try { using (MySqlConnection conn = new MySqlConnection(connStr)) { conn.Open(); // UPDATE запрос вместо INSERT string sql = "UPDATE books SET name = @name, author_id = @author_id, price = @price WHERE idbooks = @id"; MySqlCommand cmd = new MySqlCommand(sql, conn); cmd.Parameters.AddWithValue("@name", tbName.Text.Trim()); cmd.Parameters.AddWithValue("@author_id", cbAuthor.SelectedValue); cmd.Parameters.AddWithValue("@price", price); cmd.Parameters.AddWithValue("@id", bookId); // Важно: обновляем именно эту книгу int rows = cmd.ExecuteNonQuery(); if (rows > 0) { MessageBox.Show("Данные успешно обновлены!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); this.DialogResult = DialogResult.OK; this.Close(); } else { MessageBox.Show("Не удалось обновить данные.", "Ошибка"); } } } catch (Exception ex) { MessageBox.Show("Ошибка при сохранении: " + ex.Message, "Критическая ошибка"); } } private void btnCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } } }