Как добавить данные в базу MySQL из DataGrid C#?

222
28 марта 2019, 03:40

Как добавить данные вводимые в DataGrid в базу данных MySQL? Добавленных данных нет в базе, и ошибок, почему это происходит тоже нет. Я пытаюсь решить эту проблему уже несколько дней. Использую WPF.

private void dtGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
    {    
    MySqlConnection conn = DBUtils.GetDBConnection();
    string table = "brands";
    string sql = "SELECT * FROM "+table;
    MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(sql, conn);
    conn.Open();
    MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(myDataAdapter);
    myDataAdapter.InsertCommand = myCommandBuilder.GetInsertCommand();
    myDataAdapter.UpdateCommand = myCommandBuilder.GetUpdateCommand();
    myDataAdapter.DeleteCommand = myCommandBuilder.GetDeleteCommand();
    DataSet myDataSet = new DataSet();
    myDataAdapter.Fill(myDataSet, table);
    myDataAdapter.AcceptChangesDuringUpdate = true;
    myDataAdapter.Update(myDataSet, table);
    conn.Close();
}
Answer 1

Проблема в том, что вы в коде никак не задействуете DataGrid. Вы создаете пустой DataSet, заполняете его данными из базы, и потом эти же самые данные записываете назад в базу. Правильно нужно делать так:

Допустим, мы хотим сделать DataGrid, привязанную к DataTable. Сразу в конструкторе окна создадим DbDataAdapter и DataTable (нет необходимости это делать при каждом обновлении, так как структура данных и запросы то не меняются), и сохраним их в полях класса окна.

DbDataAdapter adapter;
DataTable dt;
public MainWindow()
{
    InitializeComponent();
    MySqlConnection conn = DBUtils.GetDBConnection();
    string table = "brands";
    string sql = "SELECT * FROM "+table;
    adapter = new MySqlDataAdapter(sql, conn);
    conn.Open();
    MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(adapter as MySqlDataAdapter);
    adapter.InsertCommand = myCommandBuilder.GetInsertCommand();
    adapter.UpdateCommand = myCommandBuilder.GetUpdateCommand();
    adapter.DeleteCommand = myCommandBuilder.GetDeleteCommand();            
    dt = new DataTable();
    adapter.Fill(dt); //загрузка данных
    datagrid.ItemsSource = dt.DefaultView; //привязка к DataGrid
}

Теперь, когда нужно сохранить данные (я не рекомендую сохранять при каждом изменении строки, так как будет слишком много запросов в базу, лучше создать кнопку "Сохранить"), выполним Update на той же DataTable.

private void ButtonSave_Click(object sender, RoutedEventArgs e)
{            
    adapter.Update(dt);
}
READ ALSO
Как я могу получить выбранный элемент из DataGrid WPF?

Как я могу получить выбранный элемент из DataGrid WPF?

Я получаю DataTable из базы данных, после заполняю им DataGrid:

185
Как в wp_remote_request обработать таймаут?

Как в wp_remote_request обработать таймаут?

Всем привет! Делаю запрос через wp_remote_request с заданным тайм аутом, не понимаю как мне обрабатывать ситуацию если в заданный тайм аут ответ не пришел...

179
Как передать файл на PHP?

Как передать файл на PHP?

Есть смартфоновое приложение, которое загружает с сервера картинкиПоявилась необходимость вносить изменения в адрес запроса, чтобы на смартфон...

200