如何从 table 中减去数量并以 C# 形式更新它

How to subtract quantity from table and update it in c# forms

我是 IT 专业三年级的学生,我从这个论坛找到了很多帮助,但我一直在用 C# 创建项目,所以我需要你的帮助。我的数据库中有 4 个 table,但我们将重点关注其中 2 个 materijal(Material) table 和 Skart(Scrap) table:

materijal Table(原始)有:

idmaterijal(INT), 
naziv_materijala(VARCHAR), 
kolicina_materiala(FLOAT), 
mjerna_jedinica(VARCHAR), 
sifra_materijala(INT)

material Table(英文):

idmaterial(INT) , 
name_material(VARCHAR) , 
quantity_material(FLOAT) , 
measuring_unit(VARCHAR) , 
code_material(INT) 

skart Table(原创)有:

idskart(INT), 
materijal_idmaterijal(INT)

报废 Table(eng) :

idscrap(INT), 
material_idmaterial(INT).

它们与非识别关系相关1:1。现在我的 C# 窗体中有一个组合框,如下所示。我需要从 table Materials (name_material, quantity_material, mesuring_unit, code_material) 中取出并减去我插入的数量我的表单上的文本框。例如,我的 Material table 中有 108.15 公斤 HR,我想将 45 公斤废弃 table,我如何在 C# 中做到这一点...

图片:

https://prnt.sc/hdvGuXJWNI0Q - 我在 MySQL 中的图表(这是我的语言,但我为你们翻译了每个单元格名称)

https://prnt.sc/lgIRVTCOe670 - Material面板

https://prnt.sc/t1IGxpgJ8GHl - 通过剪贴簿面板中的组合框选择 material

https://prnt.sc/6InfCPpezZga - 关于如何减去的示例

在这里我有一个想法,所以你可以从图片 skart 面板 https://prnt.sc/6InfCPpezZga 中获取并通过 comboBox1 插入 name_material(它列出了 [=60] 中的所有 material =] table ...在这里我选择了 material) 的 HR 名称和 quantity_material 通过 textBox7 在我的案例中 45 带有保存按钮 aka 按钮 13 我需要更新我的 material table 通过获取 quantity_material - textBox7 值并放置在我的 dataGridView3 中( 显示 idscrap 和 material_idmaterial)code_material,name_material, quantity_material(但我在 textBox7 中插入的数量) 和 measuring_unit ,我知道放置它并用 dataGridView 显示我必须进行内部连接或左连接,但我不太明白它...

private void button13_Click(object sender, EventArgs e)
{
    konekcija.Open();
    //OleDbCommand komanda = new OleDbCommand();
    MySqlCommand komanda = new MySqlCommand();
    komanda.Connection = konekcija;
    komanda.CommandType = CommandType.Text;
    komanda.CommandText = "update materijal set naziv_materijala='" + comboBox1 + "' where kolicina_materijala='" + textBox7.Text + "'";
    komanda.ExecuteNonQuery();
    konekcija.Close();
    comboBox1.Text = "";
    textBox7.Text = "";
    MessageBox.Show("Uspjesno ste unijeli izabrani Škart");
}

像这样的代码的正确方法应该是这样的:

private void UpdateNameFromQuantityButton_Click(object sender, EventArgs e)
{
    //konekcija.Open();  //do not keep a connection hanging around; keep a connectionString instead

    var sql = "update materijal set naziv_materijala=@nm where kolicina_materijala=@km";

    using var konekcija = new MySqlConnection(connectionString);
    using var komanda = new MySqlCommand(sql, konekcija);
    konekcija.Open();
    komanda.Parameters.AddWithValue("@nm", materialNameComboBox.Text);
    komanda.Parameters.AddWithValue("@km", quantityTextBox.Text);
    var rowsAffected = komanda.ExecuteNonQuery();  //handy to capture this to know if nothing was changed (0 rows affected)
    konekcija.Close();

    materialNameComboBox.Text = "";
    quantityTextBox.Text = "";
    MessageBox.Show("Uspjesno ste unijeli izabrani Škart");
}
  • 在您的命令和连接上使用 using;在需要时创建一个新的连接对象。重复使用同一个可能会导致某些数据库出现问题。代码中 MySqlConnection 对象的数量与数据库服务器的实际 TCP 连接数量无关,因为 TCP 连接由其他地方的机制池化。您对 Open 和 Close 的使用实际上只是租用和 returns 一个共用连接
  • 始终在 SQL 中使用 @parameters 将数据放入命令中。总是*
  • 完成后尽快关闭连接

* 除非“数据”类似于 table 名称或列名,在这种情况下,它不能被参数化;尽量避免这种情况 - 这通常是可能的