将数据从 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 插入数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何使用从 datagridview 检索到的 ID 将数据保存到数据库?