You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataGridView多行存入同一数据库ID仅插入一行问题求助

问题分析与解决

核心问题1:循环逻辑错误

你的For循环条件写法完全错误,DataGridView2.Rows.Count = 1是布尔判断,会被转成整数(True为-1,False为0),导致循环只执行一次甚至不执行。正确的循环范围应该遍历所有有效行:

For i As Integer = 0 To DataGridView2.Rows.Count - 1
    ' 跳过DataGridView自动生成的空行(如果开启了AllowUserToAddRows)
    If Not DataGridView2.Rows(i).IsNewRow Then
        p_id = DataGridView2.Rows(i).Cells(0).Value
        p_description = DataGridView2.Rows(i).Cells(1).Value
        p_from = DataGridView2.Rows(i).Cells(2).Value
        p_to = DataGridView2.Rows(i).Cells(3).Value
        
        ' 每一行数据对应一次插入操作,把SQL执行代码放在这里
        InsertRowToDB(petition_id.Text.Trim, petitioner_name.Text.Trim, p_id, p_description, p_from, p_to)
    End If
Next

核心问题2:SQL执行位置错误

你把SQL插入代码放在了循环外面,循环结束后只会用最后一次循环的变量值执行一次插入,自然只有一行数据存入数据库。必须把插入操作放到循环内部,每遍历一行就执行一次插入。

核心问题3:SQL语法错误与注入风险

你的SQL拼接有语法错误:'"petition_id.Text.Trim"'' 缺少连接符&,而且直接拼接字符串会引发SQL注入风险,强烈使用参数化查询,示例如下:

Private Sub InsertRowToDB(petitionId As String, petitionerName As String, itemNo As Integer, description As String, fromVal As String, toVal As String)
    Dim connStr As String = "你的数据库连接字符串"
    Using conn As New SqlConnection(connStr)
        conn.Open()
        Dim sql As String = "INSERT INTO Petition_tbl(p_id,p_name_of_petitioner,p_item_no,p_description,p_from,p_to) 
                             VALUES(@PetitionId, @PetitionerName, @ItemNo, @Description, @FromVal, @ToVal)"
        Using cmd As New SqlCommand(sql, conn)
            cmd.Parameters.AddWithValue("@PetitionId", petitionId)
            cmd.Parameters.AddWithValue("@PetitionerName", petitionerName)
            cmd.Parameters.AddWithValue("@ItemNo", itemNo)
            cmd.Parameters.AddWithValue("@Description", description)
            cmd.Parameters.AddWithValue("@FromVal", fromVal)
            cmd.Parameters.AddWithValue("@ToVal", toVal)
            
            cmd.ExecuteNonQuery()
        End Using
    End Using
End Sub

额外注意事项

  • 检查DataGridView2的AllowUserToAddRows属性,若为True,最后一行是空行,必须用IsNewRow判断跳过,避免插入空数据。
  • 确保数据库连接字符串正确,操作数据库时有足够权限。
  • 可以添加异常捕获,处理插入时可能出现的类型不匹配、连接失败等问题。

内容的提问来源于stack exchange,提问作者Shigeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:47:43