Мне нужно сделать Update моей БД, я работаю с Ado.NET в WindowsForms через GridView

Я могу выводить все данные из моей Базы Данных(MS SQL) в GridView. И могу добавлять данные в GridView чтоб потом они появились в моей Базе Данных. Но мне нужно сделать операцию Update для Базы Данных, с эти проблем нет. Дело в том что мне нужно сделать это в отсоединенном режиме! Нужен код как сделать операцию Update в отсоединенном режиме в Ado.NET. Вот код как я делаю вставку нового элемента в Базу Данных.

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        adapter.Fill(dataSet, "Product");
        dataGridView1.DataSource = dataSet.Tables["Product"];
        
        string title = textBoxName.Text;
        double price = Convert.ToDouble(textBox2.Text);
        
        new SqlCommandBuilder(adapter);
        
        DataRow dataRow = dataSet.Tables["Product"].NewRow();
        dataRow["title"] = title;
        dataRow["price"] = price;
        dataSet.Tables["Product"].Rows.Add(dataRow);
        adapter.Update(dataSet, "Product");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Warning!!!");
    }
}

Ответы (1 шт):

Автор решения: Alexander Petrov

Использование DataSet/DataTable (или любой другой коллекции) - это и есть отсоединённый режим.

Вам нужно разделить свой код на два метода:

private void buttonLoadData_Click(object sender, EventArgs e)
{
    try
    {
        adapter.Fill(dataSet, "Product");
        dataGridView1.DataSource = dataSet.Tables["Product"];
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Warning!!!");
    }
}

private void buttonSaveData_Click(object sender, EventArgs e)
{
    try
    {
        string title = textBoxTitle.Text;
        decimal price = numericUpDownPrice.Value;

        DataRow dataRow = dataSet.Tables["Product"].NewRow();
        dataRow["title"] = title;
        dataRow["price"] = price;
        dataSet.Tables["Product"].Rows.Add(dataRow);

        new SqlCommandBuilder(adapter);
        adapter.Update(dataSet, "Product");
    }
    catch (Exception e)
    {
        ...
    }
}

При нажатии на кнопку Load Data данные загружаются из БД и показываются в датагриде.

Поработав с данными пользователь нажимает на кнопку Save Data и БД обновляется.


Всем переменным давайте говорящие имена.
Не используйте double для работы с деньгами. Взамен используйте decimal. При этом можно взять контрол NumericUpDown вместо TextBox (но это по желанию).

→ Ссылка