Как переделать запросы чтобы они у меня обновляли или добавляли только 1 строку, а не всю таблицу?

Рейтинг: 0Ответов: 1Опубликовано: 07.06.2023
    //Если есть ещё ошибки помогите их исправить, заранее спасибо
    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();

    }

Ответы

▲ 0

Проблему нужно решать кардинально: привязать 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