将数据从 DataGridView 插入数据库

Posted

技术标签:

【中文标题】将数据从 DataGridView 插入数据库【英文标题】:Inserting data from a DataGridView to a database 【发布时间】:2012-03-20 09:37:11 【问题描述】:

我有一个小的 DataGridView,它可以让用户输入数据。

我正在尝试使用此代码将 DataGridView 中的数据输入到数据库中。

    strQry = "INSERT INTO Emp_Fam_Details (empID, famName, famAge, famRelation, famOccup)" _
            & "VALUES (@ID, @Name, @Age, @Rel, @Occ)"
    Dim adapFam As New SqlDataAdapter
    adapFam.InsertCommand = New SqlCommand(strQry, sqlcon)

    For i As Integer = 0 To grdFamily.Rows.Count - 1
        adapFam.InsertCommand.Parameters.AddWithValue("@ID", txtEmpID.Text.Trim)
        adapFam.InsertCommand.Parameters.AddWithValue("@Name", grdFamily.Columns(0))
        adapFam.InsertCommand.Parameters.AddWithValue("@Age", grdFamily.Columns(1))
        adapFam.InsertCommand.Parameters.AddWithValue("@Rel", grdFamily.Columns(2))
        adapFam.InsertCommand.Parameters.AddWithValue("@Occ", grdFamily.Columns(3))

        result2 = adapFam.InsertCommand.ExecuteNonQuery()
    Next

当我运行这个时,我遇到了这个错误。

我在 SO 上找到了this 解决方案,但由于我使用的是参数而不是附加值,所以我很难理解如何使用参数来实现。

谁能告诉我如何做到这一点?

谢谢大家。

【问题讨论】:

【参考方案1】:

您不能将列映射到数据。您需要添加的是该列索引的行单元格数据

这是错误的grdFamily.Columns(0)

for 循环中的参数分配应更正如下

注意请根据您的表格更改数据类型。

adapFam.InsertCommand.Parameters.Add("@ID", SqlDbType.Int)
adapFam.InsertCommand.Parameters.Add("@Name", SqlDbType.VarChar)
adapFam.InsertCommand.Parameters.Add("@Age", SqlDbType.VarChar)
adapFam.InsertCommand.Parameters.Add("@Rel", SqlDbType.VarChar)
adapFam.InsertCommand.Parameters.Add("@Occ", SqlDbType.VarChar)

For i As Integer = 0 To grdFamily.Rows.Count - 1
  adapFam.InsertCommand.Parameters[0].Value = Convert.ToInt32(txtEmpID.Text.Trim)
  adapFam.InsertCommand.Parameters[1].Value = grdFamily.Rows[i].Cells[0].Value
  adapFam.InsertCommand.Parameters[2].Value = grdFamily.Rows[i].Cells[1].Value
  adapFam.InsertCommand.Parameters[3].Value = grdFamily.Rows[i].Cells[2].Value
  adapFam.InsertCommand.Parameters[4].Value = grdFamily.Rows[i].Cells[3].Value

    result2 = adapFam.InsertCommand.ExecuteNonQuery()
Next

【讨论】:

这很好用。非常感谢你。虽然我在这里遇到了一个小问题。当我运行它时,第一行可以正常插入,但是在插入第二行时会抛出 this 错误。有没有办法刷新参数之类的? 嗯,您正在循环内添加参数。这意味着您正在为每个 i 添加参数。请在循环前添加参数并在循环内赋值。它应该工作...... 我在ExecuteNonQuery 之后使用了adapFam.InsertCommand.Parameters.Clear()。它现在工作正常。感谢您的帮助。

以上是关于将数据从 DataGridView 插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

c# datagridview1 指定某列数据居中

在数据库中同时从文本框和 datagridview 插入

如何使用从 datagridview 检索到的 ID 将数据保存到数据库?

如何使用DataGridView从数据库表中插入,更新和删除数据?

将数据插入 datagridview vb.net

在另一个对话框将数据插入 DB 后刷新 DataGridView