【问题标题】:Editing DataGridView data and updating changes directly into MySQL database编辑 DataGridView 数据并将更改直接更新到 MySQL 数据库中
【发布时间】:2020-05-09 21:24:17
【问题描述】:

我想保存在datagridview 中所做的更改。我有在datagridview 上添加现有条目的代码,但我不知道如何更新对 datagridview 所做的更改 这是我用来将datagridview 条目添加到数据库的代码

Public Sub ADD_DGV_CMD(SENDER As String)`
    For Each row As DataGridViewRow In ALL_BILL_FRM.DataGridView1.Rows
        Dim constring As String = "server=localhost; user=root; password=Masoom1; database=airtech_db; convert zero datetime=true;"
        Using con As New MySqlConnection(constring)
            Using cmd As New MySqlCommand("Insert into `all_bills` values(null,@Supplier_Name,@Bill_No,@Bill_Type,@Bill_Amount,@Bill_Date);", con)
                cmd.Parameters.AddWithValue("@Supplier_Name", row.Cells(1).Value)
                cmd.Parameters.AddWithValue("@Bill_No", row.Cells(2).Value)
                cmd.Parameters.AddWithValue("@Bill_Type", row.Cells(3).Value)
                cmd.Parameters.AddWithValue("@Bill_Amount", row.Cells(4).Value)
                cmd.Parameters.AddWithValue("@Bill_Date", row.Cells(5).Value)
                con.Open()
                cmd.ExecuteNonQuery()
                con.Close()
            End Using
        End Using
    Next
    MessageBox.Show("Records inserted.")
End Sub

【问题讨论】:

  • 账单日期是字符串?真的吗? o_0
  • 那里有很多错误。创建一个DataTable 并将其绑定到网格。您可以自己构建架构,也可以通过在数据适配器上调用FillSchema 来创建它。需要保存时,请在数据适配器上调用Update 以将批次保存在一个批次中。您需要为数据适配器创建一个适当的InsertCommand
  • 好吧,我真的笑得很厉害,但实际上它必须是字符串,因为并不总是提到日期,因为有时会提到其他内容而不是日期,所以这就是为什么,但这个问题让我肯定笑了,伙计: p
  • 亲爱的 jmchilhinney 感谢您的帮助,因为您总是对我帮助很大 我很抱歉地说我自己尝试创建数据表和适配器并尝试更新它,但不幸的是我做不到因此,如果您能提供代码如何操作,您会很高兴,如果需要,我可以直接联系您寻求帮助吗?
  • 我希望这不是您的真实用户名和密码。即使在本地主机上也要养成从不发布凭据的习惯。

标签: vb.net winforms


【解决方案1】:

您不断在循环中添加参数。如果您的表包含多个参数,则将再次添加所有参数。它们不会替换现有的,而是补充它们,因此出现“已添加”错误

将您的参数添加到循环之外。厨师得到你的工作方式,以便他的参数 values 在循环中更新..

我会说“你应该这样做:”

  .Parameters("@Supplier_Name").Value = row.Cells(1).Value.ToString

..在循环中,但你实际上应该做的就是把这些扔掉,看看使用强类型数据集、dapper 或实体框架。如果您热衷于继续使用 SQL 填充您的按钮单击处理程序,dapper 可以让您做到这一点,但您可能会从更高级别的东西中获得更多收益

使用数据集的简短版本是:

  • 向您的项目添加数据集
  • 打开它,右键单击表面并选择添加 TableAdapter
  • 连接 MySQL,确保您已安装驱动程序和 Visual Studio 工具
  • 输入SELECT * FROM all_bills 作为查询,完成向导
  • 保存数据集
  • 打开表单设计器
  • 打开数据源窗口(查看菜单、其他窗口)
  • 将代表您的表格的网格拖出数据源窗口并将其放在表单上
  • 运行项目

您的网格将加载并能够读取和写入 dB,而不是您编写的一行代码(由您编写;Visual Studio 在幕后编写了很多代码 - 您可以在各种 .Designer.vb 文件中看到它)!

【讨论】:

    【解决方案2】:
    Public Class MAIN_FRM
      Dim changes_counter As Integer, SEARCH_TYPE As String
      Dim con As New MySqlConnection("server=localhost; user=root; password=Masoom1; database=airtech_db;")
      Dim da As New MySqlDataAdapter("Select * from all_bills;", con)
      Dim ds As New DataSet
      Dim cmdBuilder As New MySqlCommandBuilder
      Dim LOAD_CMD_CALL As Boolean
    
      Private Sub UPDATE_BTN_Click(sender As Object, e As EventArgs) Handles UPDATE_BTN.Click
        Try
            cmdBuilder = New MySqlCommandBuilder(da)
            ds = ds.GetChanges()
            If ds IsNot Nothing Then
                da.Update(ds)
                MsgBox("Changes Done")
            End If
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
      END SUB
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多