在 DataGridView C# 中保存更改

Save Changes in DataGridView C#

将数据库中的 table 调用到 dataGridView 并将数据输入到此 DataGridView 的空单元格后,我想通过单击按钮将此数据保存到我的数据库,但我没有知道怎么做

这是我访问数据库的方式:

public MySqlConnection mycon;
 public MySqlCommand mycom;
 public string connect = "Server=localhost;Database=base;Uid=root;password=pas;charset=utf8";
 public SD.DataSet ds;

 mycon = new MySqlConnection(connect);
 mycon.Open();

 MySqlDataAdapter ms_data = new MySqlDataAdapter(script, connect);
 SD.DataTable table = new SD.DataTable();
 ms_data.Fill(table);
 dataGridView1.DataSource = table;
 mycon.Close();

写起来让我很痛苦,但这应该是所需的最少调用集:

MySqlDataAdapter ms_data = new MySqlDataAdapter(script, connect);
new MySqlCommandBuilder(ms_data);
ms_data.Update(dataGridView1.DataSource as DataTable);

您需要一个适配器,然后将其传递给命令生成器应该使 CB 读取加载到适配器中的 select 命令并使用它来填充适配器的其他命令 (insert/update/delete) ,然后您可以调用 Update 并传递修改后的 table 并且 table 中的行将被检查以查看它们是新的、修改的还是删除的,并且将调用适当的命令以保留更改

script 需要是一个 SQL,select 是来自 DB

的主键列

为什么要“煞费苦心地说”?因为与取代它的技术相比,这是一种冗长、艰苦的数据库访问方式,更不用说像 EF 这样的现代技术了。如果您喜欢使用数据table,请考虑:

  • 向项目添加新的 DataSet 类型的文件
  • 打开它,右键单击表面,添加一个table适配器
  • 配置连接字符串
  • 配置一个“select returns 行”查询,如 SELECT * FROM sometable WHERE id = @someId
  • 一个table适配器和数据table对出现,模仿数据库table中的
  • 切换到窗体,打开数据源window(查看菜单,其他Windows),将table拖到窗体-数据网格视图,数据集,table出现适配器、导航器等。
  • 万事俱备。

您的 table 适配器是增强型数据适配器,并将 Fill/Update 数据 table from/to 数据库。 datatable 已命名列,通常更易于使用。所有加载和保存的代码都写在了FormX.cs里面,大家可以看看,不过基本等于:

var x = new BlahBlahTableAdapter();
x.FillBy(this.BlahBlahDataSet, someIdTextBox.Text);

填充绑定到网格的数据table将导致数据自动出现在网格中。

保存同样简单:

var x = new BlahBlahTableAdapter();
x.Update(this.BlahBlahDataSet);

脚注:我相信您需要安装 MySQL Tools For Visual Studio 才能玩得很好。此外,如果您制作 NetCore/Net5+ WinForms 项目,您可能会遇到问题,因为新的 .NET 的某些元素不能正确支持 winforms

脚注 2:如果您想知道为什么 table 适配器向导选项“刷新数据集”不起作用,请参阅 https://bugs.mysql.com/bug.php?id=99199


如果您想尝试更现代的东西,那里有很多不错的 EF 教程。 EF 是一种使用数据库在代码中创建对象的工具。对象的数据存在于数据库中,并由 EF 自动来回传输 from/to objects/database。如果你深入了解它,EF Core Power Tools 是一个非常有用的 VS 插件