【问题标题】:Insert, Delete, and Edit Data in DataGridView using single Update Button in Vb.net使用 Vb.net 中的单个更新按钮在 DataGridView 中插入、删除和编辑数据
【发布时间】:2022-01-17 11:10:26
【问题描述】:

我试图在 Vb.net 中添加、删除和编辑功能,方法是使用一个更新按钮并手动更改 datagridview 中的值,然后点击更新。但是,我收到一条错误消息 "System.InvalidOperationException: '当传递 DataRow 集合并修改时,更新需要有效的 UpdateCommand"

有什么想法吗?错误出现在 da.Update(changes) 旁边

此外,在我的代码中未显示的上述代码中,我在私有 form1_load 子中有 load_data()。

代码如下:

Dim da As New SqlDataAdapter
Dim dt As New DataSet

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    Dim cmd As New SqlCommandBuilder
    Dim changes As New DataSet
    changes = dt.GetChanges
    If changes IsNot Nothing Then
        da.Update(changes)
        da.Fill(dt)
        DataGridView1.DataSource = dt.Tables(0)
    End If
End Sub

Private Sub load_data()
    Using connection = New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=vbconnectionfinal;Integrated Security=True")

        da = New SqlDataAdapter("Select * From TrueTrack", connection)
        dt.Clear()
        da.Fill(dt)
        DataGridView1.DataSource = dt.Tables(0)

    End Using
End Sub

【问题讨论】:

  • da 在哪里声明?根据错误消息,您是否指定了更新命令?
  • da 在我的问题代码上方声明,由于某种原因它没有进入代码框。至于指定更新命令,它应该根据我相信或应该更新的数据集来填充,除非我把那部分搞砸了
  • SqlDataAdapter 构造函数不会创建任何默认的 INSERT/UPDATE/DELETE 命令。每个命令都应该明确指定。
  • 在 da.Update 行上设置断点并检查属性以确认可能吗?
  • 检查我的回答是否能帮助您处理这个问题,如果有帮助,请考虑accepting it。如果没有,请在此处提供更多详细信息。

标签: sql database vb.net visual-studio


【解决方案1】:

您正在创建一个SqlCommandBuilder,但没有将它与SqlDataAdapter 关联,那么有什么意义呢?命令生成器的全部目的是在您在数据适配器上调用 Update 时自动生成操作命令。创建数据适配器时,请立即创建命令构建器并将两者关联起来,您可以通过将数据适配器作为参数传递给命令构建器的构造函数来实现。

【讨论】:

    【解决方案2】:

    以下代码适用于我。

    Dim da As New SqlDataAdapter
    Dim dt As New DataSet
    Dim connection = New SqlConnection("connection string")
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim cmd As New SqlCommandBuilder(da)
        Dim changes As New DataSet
        changes = dt.GetChanges
        If changes IsNot Nothing Then
            da.Update(changes)
            DataGridView1.DataSource = dt.Tables(0)
        End If
    End Sub
    Private Sub load_data()
        Dim cmd As SqlCommand = New SqlCommand("Select * From TrueTrack", connection)
        da = New SqlDataAdapter(cmd)
        dt.Clear()
        da.Fill(dt)
        DataGridView1.DataSource = dt.Tables(0)
    End Sub
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        load_data()
    End Sub
    
    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        connection.Close()
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多