Мне нужно сделать 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 шт):
Использование 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 (но это по желанию).