Как переделать запросы чтобы они у меня обновляли или добавляли только 1 строку, а не всю таблицу?
//Если есть ещё ошибки помогите их исправить, заранее спасибо
private void button2_Click(object sender, EventArgs e)
{
//Добавить
if (dataGridView1.SelectedRows.Count != 1)
{
MessageBox.Show("Выберите одну строку!", "Внимание!");
return;
}
//Запомним выбранную строку
int index = dataGridView1.SelectedRows[0].Index;
//Проверим данные в таблицы
if (dataGridView1.Rows[index].Cells[0].Value == null ||
dataGridView1.Rows[index].Cells[1].Value == null ||
dataGridView1.Rows[index].Cells[2].Value == null ||
dataGridView1.Rows[index].Cells[3].Value == null ||
dataGridView1.Rows[index].Cells[4].Value == null)
{
MessageBox.Show("Не все данные введены!", "Внимание!");
return;
}
//Считаем данные
string Cod = dataGridView1.Rows[index].Cells[0].Value.ToString();
string Reader = dataGridView1.Rows[index].Cells[1].Value.ToString();
string Number = dataGridView1.Rows[index].Cells[2].Value.ToString();
string Acquisition = dataGridView1.Rows[index].Cells[3].Value.ToString();
string Return = dataGridView1.Rows[index].Cells[4].Value.ToString();
//Создаем соеденение
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb";//строка соеденения
OleDbConnection dbConnection = new OleDbConnection(connectionString);//создаем соеденение
//Выполянем запрос к БД
dbConnection.Open();//открываем соеденение
string query = "INSERT INTO [Abonnement] ([Читатель], [Номер_Читательского_Билета], [Дата_Получения], [Дата_Возврата]) VALUES ('" + Reader + "','" + Number + "','" + Acquisition + "','" + Return + "')";//строка запроса
OleDbCommand dbCommand = new OleDbCommand(query, dbConnection);//команда
//Выполняем запрос
if (dbCommand.ExecuteNonQuery() != 1)
{
MessageBox.Show("Ошибка выполнения запроса!", "Ошибка!");
}
else
MessageBox.Show("Данные добавлены!", "Внимание!");
//Закрываем соеденение с БД
dbConnection.Close();
}
private void button3_Click(object sender, EventArgs e)
{
//Обновить
//Проверим количество выбранных строк
if (dataGridView1.SelectedRows.Count != 1)
{
MessageBox.Show("Выберите одну строку!", "Внимание!");
return;
}
//Запомним выбранную строку
int index = dataGridView1.SelectedRows[0].Index;
//Проверим данные в таблицы
if (dataGridView1.Rows[index].Cells[0].Value == null ||
dataGridView1.Rows[index].Cells[1].Value == null ||
dataGridView1.Rows[index].Cells[2].Value == null ||
dataGridView1.Rows[index].Cells[3].Value == null ||
dataGridView1.Rows[index].Cells[4].Value == null)
{
MessageBox.Show("Не все данные введены!", "Внимание!");
return;
}
//Считаем данные
string Cod = dataGridView1.Rows[index].Cells[0].Value.ToString();
string Reader = dataGridView1.Rows[index].Cells[1].Value.ToString();
string Number = dataGridView1.Rows[index].Cells[2].Value.ToString();
string Acquisition = dataGridView1.Rows[index].Cells[3].Value.ToString();
string Return = dataGridView1.Rows[index].Cells[4].Value.ToString();
//Создаем соеденение
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb";//строка соеденения
OleDbConnection dbConnection = new OleDbConnection(connectionString);//создаем соеденение
//Выполянем запрос к БД
dbConnection.Open();//открываем соеденение
string query = "UPDATE [Abonnement] SET Читатель ='" + Reader + "', Номер_Читательского_Билета ='" + Number + "', Дата_Получения ='" + Acquisition + "', Дата_Возврата ='" + Return + "'";//строка запроса
OleDbCommand dbCommand = new OleDbCommand(query, dbConnection);//команда
//Выполняем запрос
if (dbCommand.ExecuteNonQuery() != 1)
{
MessageBox.Show("Ошибка выполнения запроса!", "Ошибка!");
}
else
{
MessageBox.Show("Данные изменены!", "Внимание!");
}
//Закрываем соеденение с БД
dbConnection.Close();
}
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
Проблему нужно решать кардинально: привязать DataGridView к выборке из базы, тогда данные будут меняться автоматически. Вот тут всё описано https://learn.microsoft.com/en-us/dotnet/desktop/winforms/controls/how-to-bind-data-to-the-windows-forms-datagridview-control?view=netframeworkdesktop-4.8