首页 > 解决方案 > 带有 DataGridView 的 VB .net

问题描述

cmd.ExecuteNonQuery() 仅将第一行数据传递给数据库,即使我有 3 行。

Dim cmd As New OleDbCommand("insert into Nage(GName,GAge)values(@GName,@Gage)", mycon)
Dim g1name As String
Dim g2age As String
For x As Integer = 0 To DGV1.Rows.Count - 1
        g1name = DGV1.Rows(x).Cells(0).Value
        g2age = DGV1.Rows(x).Cells(1).Value
        cmd.Parameters.AddWithValue("@Gname", g1name)
        cmd.Parameters.AddWithValue("@Gage", g2age)
        cmd.ExecuteNonQuery()
Next

我正在尝试从 datagridview 添加数据以访问数据库 Datagridview 有 3 行数据,但 cmd.ExecuteNonQuery() 仅将第一行数据传递到数据库,即使我有 3 行。

Dim cmd As New OleDbCommand("insert into Nage(GName,GAge)values(@GName,@Gage)", mycon)

Dim g1name As String
Dim g2age As String
For x As Integer = 0 To DGV1.Rows.Count - 1
        g1name = DGV1.Rows(x).Cells(0).Value
        g2age = DGV1.Rows(x).Cells(1).Value
        cmd.Parameters.AddWithValue("@Gname", g1name)
        cmd.Parameters.AddWithValue("@Gage", g2age)
        cmd.ExecuteNonQuery()
Next

我想将所有行数据添加到数据库

标签: vb.net

解决方案


第一次运行循环时,它会向参数集合添加 2 个参数。一切都很好,因为您在 Sql 语句中引用了 2 个参数(@GName 和 @Gage)。在您要添加的第二条记录的循环的下一次迭代中,将另外 2 个参数添加到参数集合中。现在您有 4 个参数,但 Sql 语句中只有 2 个。看到问题了吗?将添加的参数移到循环之外,这样它们只会添加一次,并且只需更改循环中参数的值。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    'The Using blocks ensure that your database objects
    'are closed and disposed even if there is an error
    Using mycon As New OleDbConnection("Your connection string")
        Using cmd As New OleDbCommand("insert into Nage(GName, GAge) values(@GName, @Gage)", mycon)
            cmd.Parameters.Add("@GName", OleDbType.VarChar)
            cmd.Parameters.Add("@Gage", OleDbType.VarChar)
            mycon.Open()
            'Changed to a For Each to save a little typing
            For Each row As DataGridViewRow In DGV1.Rows
                cmd.Parameters("@Gname").Value = row.Cells(0).Value
                cmd.Parameters("@Gage").Value = row.Cells(1).Value
                cmd.ExecuteNonQuery()
            Next
        End Using
    End Using
End Sub

需要注意的是,对于 OleDb,重要的是参数的顺序,而不是名称。当您使用 Sql Server 时,名称变得很重要。

如果您想研究数据绑定、数据适配器等,您会发现您可以通过 DataAdpater.Update() 更新数据库而无需循环。


推荐阅读