我创建了“ pracownicy”表(从波兰语翻译为“ Workers”)。首先,我从数据库下载所有数据:
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 Event上编辑此表上的任何单元格值并正常工作:
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"]);
}
}
}
}
我启动此应用程序,它显示该表:
然后我插入新的行值:
我插入了一个新的,但启动此应用程序后,该表仅从数据库返回了FIRST行的值:
这是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
数据库中“ Pracownicy”表中的sql列:
ID_PRACOWNIKA INT
IMIE VARCHAR
NAZWISKO VARCHAR
GRUPA_PRACOWNIKOW VARCHAR
STANOWISKO VARCHAR
NUMER_KARTY VARCHAR
有人想过如何解决插入的数据库比添加的行仅返回第一个值后保存的问题。我在Google上搜索过,但不知道原因是什么。也许我忽略了一些东西。