После вставки новой строки в базу данных возвращается только значение первой строки - PullRequest
0 голосов
/ 27 февраля 2019

Я создал таблицу «pracownicy» (в переводе с польского - «Рабочие»).Сначала я загружаю все данные из базы данных:

    connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=");
    adapter = new MySqlDataAdapter("SELECT * FROM eltechnik_projekt1.pracownicy", connection);
ds = new DataSet();
adapter.Fill(ds, "pracownicy");
dataGridView1.DataSource = ds.Tables["pracownicy"];

Затем я могу отредактировать любое значение ячейки в этой таблице на событии CellOnEdit и работает нормально:

    private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        using (connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password="))
        {
            using (MySqlCommand cmd = new MySqlCommand())
            {
                cmd.CommandText = @"UPDATE eltechnik_projekt1.pracownicy SET IMIE = @IMIE, NAZWISKO = @NAZWISKO, GRUPA_PRACOWNIKOW = @GRUPA_PRACOWNIKOW, STANOWISKO = @STANOWISKO, NUMER_KARTY = @NUMER_KARTY WHERE ID_PRACOWNIKA = @ID_PRACOWNIKA";
                cmd.Parameters.Add("@IMIE", MySqlDbType.VarChar, 50, "IMIE");
                cmd.Parameters.Add("@NAZWISKO", MySqlDbType.VarChar, 50, "NAZWISKO");
                cmd.Parameters.Add("@GRUPA_PRACOWNIKOW", MySqlDbType.VarChar, 50, "GRUPA_PRACOWNIKOW");
                cmd.Parameters.Add("@STANOWISKO", MySqlDbType.VarChar, 50, "STANOWISKO");
                cmd.Parameters.Add("@NUMER_KARTY", MySqlDbType.VarChar, 50, "NUMER_KARTY");
                MySqlParameter param = cmd.Parameters.Add("@ID_PRACOWNIKA", MySqlDbType.Int64, 10, "ID_PRACOWNIKA");
                param.SourceVersion = DataRowVersion.Original;
                cmd.Connection = connection;
                using (MySqlDataAdapter da = new MySqlDataAdapter())
                {
                    da.UpdateCommand = cmd;
                    da.InsertCommand = cmd;
                    da.Update(ds.Tables["pracownicy"]);
                }
            }
        }
    }

Далее я бы хотелвставить новую строку и обновить в базе данных с помощью строк Добавлено событие:

  private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            using (connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password="))
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    cmd.CommandText = @"INSERT INTO eltechnik_projekt1.pracownicy(IMIE, NAZWISKO, GRUPA_PRACOWNIKOW, STANOWISKO, NUMER_KARTY) VALUES(@IMIE, @NAZWISKO, @GRUPA_PRACOWNIKOW, @STANOWISKO, @NUMER_KARTY);";
                    cmd.Parameters.Add("@IMIE", MySqlDbType.VarChar, 50, "IMIE");
                    cmd.Parameters.Add("@NAZWISKO", MySqlDbType.VarChar, 50, "NAZWISKO");
                    cmd.Parameters.Add("@GRUPA_PRACOWNIKOW", MySqlDbType.VarChar, 50, "GRUPA_PRACOWNIKOW");
                    cmd.Parameters.Add("@STANOWISKO", MySqlDbType.VarChar, 50, "STANOWISKO");
                    cmd.Parameters.Add("@NUMER_KARTY", MySqlDbType.VarChar, 50, "NUMER_KARTY");
                    MySqlParameter param = cmd.Parameters.Add("@ID_PRACOWNIKA", MySqlDbType.Int64, 99, "ID_PRACOWNIKA");
                    param.SourceVersion = DataRowVersion.Original;
                    cmd.Connection = connection;
                    using (MySqlDataAdapter da = new MySqlDataAdapter())
                    {
                        da.InsertCommand = cmd;
                        da.UpdateCommand = cmd;
                        da.Update(ds.Tables["pracownicy"]);
                    }
                }
            }
        }

Я запускаю это приложение, и оно показывает эту таблицу:

enter image description here

затем я вставляю новые значения строки:

enter image description here

Я вставил новое, но после запуска этого приложения эта таблица возвращает только значение строки FIRST из базы данных:

enter image description here

это еще не окончательный код NewTables.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Collections;

namespace KontrolaBazaDanych
{
    public partial class New_Tables : Form
    {
        public New_Tables()
        {
            InitializeComponent();
        }
        ComboBox combo, combo2;
        MySqlConnection connection;
        MySqlDataAdapter adapter, adapter2, adapter3, adapter4;
        DataSet ds, ds2, ds3, ds4;
        DataTable dt, dt1;
        {
            try
            {
                connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=");
                adapter = new MySqlDataAdapter("SELECT * FROM projekt1.pracownicy", connection);
                connection.Open();

                ds = new DataSet();
                adapter.Fill(ds, "pracownicy");
                dataGridView1.DataSource = ds.Tables["pracownicy"];

                dataGridView1.Columns[0].Visible = false;

                connection.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
 private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            dataGridView1.Rows[e.RowIndex].Cells[0].Value = e.RowIndex + 1;
        }
 private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            using (connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password="))
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    cmd.CommandText = @"UPDATE projekt1.pracownicy SET IMIE = @IMIE, NAZWISKO = @NAZWISKO, GRUPA_PRACOWNIKOW = @GRUPA_PRACOWNIKOW, STANOWISKO = @STANOWISKO, NUMER_KARTY = @NUMER_KARTY WHERE ID_PRACOWNIKA = @ID_PRACOWNIKA";
                    cmd.Parameters.Add("@IMIE", MySqlDbType.VarChar, 50, "IMIE");
                    cmd.Parameters.Add("@NAZWISKO", MySqlDbType.VarChar, 50, "NAZWISKO");
                    cmd.Parameters.Add("@GRUPA_PRACOWNIKOW", MySqlDbType.VarChar, 50, "GRUPA_PRACOWNIKOW");
                    cmd.Parameters.Add("@STANOWISKO", MySqlDbType.VarChar, 50, "STANOWISKO");
                    cmd.Parameters.Add("@NUMER_KARTY", MySqlDbType.VarChar, 50, "NUMER_KARTY");
                    MySqlParameter param = cmd.Parameters.Add("@ID_PRACOWNIKA", MySqlDbType.Int64, 10, "ID_PRACOWNIKA");
                    param.SourceVersion = DataRowVersion.Original;
                    cmd.Connection = connection;
                    using (MySqlDataAdapter da = new MySqlDataAdapter())
                    {
                        da.UpdateCommand = cmd;
                        da.InsertCommand = cmd;
                        da.Update(ds.Tables["pracownicy"]);
                    }
                }
            }
        }
        private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            using (connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password="))
            {
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    cmd.CommandText = @"INSERT INTO projekt1.pracownicy(IMIE, NAZWISKO, GRUPA_PRACOWNIKOW, STANOWISKO, NUMER_KARTY) VALUES(@IMIE, @NAZWISKO, @GRUPA_PRACOWNIKOW, @STANOWISKO, @NUMER_KARTY);";
                    cmd.Parameters.Add("@IMIE", MySqlDbType.VarChar, 50, "IMIE");
                    cmd.Parameters.Add("@NAZWISKO", MySqlDbType.VarChar, 50, "NAZWISKO");
                    cmd.Parameters.Add("@GRUPA_PRACOWNIKOW", MySqlDbType.VarChar, 50, "GRUPA_PRACOWNIKOW");
                    cmd.Parameters.Add("@STANOWISKO", MySqlDbType.VarChar, 50, "STANOWISKO");
                    cmd.Parameters.Add("@NUMER_KARTY", MySqlDbType.VarChar, 50, "NUMER_KARTY");
                    MySqlParameter param = cmd.Parameters.Add("@ID_PRACOWNIKA", MySqlDbType.Int64, 99, "ID_PRACOWNIKA");
                    param.SourceVersion = DataRowVersion.Original;
                    cmd.Connection = connection;
                    using (MySqlDataAdapter da = new MySqlDataAdapter())
                    {
                        da.InsertCommand = cmd;
                        da.UpdateCommand = cmd;
                        da.Update(ds.Tables["pracownicy"]);
                    }
                }
            }
        }
   }
}

Я переведу значения столбцов с польского на английский:

ID_PRACOWNIKA = WORKERS_ID    
IMIE = FIRST NAME
NAZWISKO = LAST NAME
GRUPA_PRACOWNIKOW = WORKERS_GROUP
STANOWISKO = POSITION
NUMER_KARTY = CARD_NUMBER

столбцы sql в таблице "Pracownicy" из базы данных:

ID_PRACOWNIKA INT
IMIE VARCHAR
NAZWISKO VARCHAR
GRUPA_PRACOWNIKOW VARCHAR
STANOWISKO VARCHAR
NUMER_KARTY VARCHAR

Кто-то знает, как решить, что вставленный один сохраняет в базу данных, чем после добавления строки возвращает только первое значение.Я искал в Google, но понятия не имею, в чем причина.Может быть, я что-то упустил.

...