当我尝试通过 datagridview 将数据从 table 保存到另一个时

When I try to save data from table to another by datagridview

我有一个 datagridview 从 (t1) 读取数据,我想用一个过程将数据保存到另一个 table (t2)

create procedure [dbo].[saving_tasks]
    @task1 nvarchar(50),
    @task2 nvarchar(50),
    @task3 nvarchar(50)
as 
begin
    insert into t2 (task1, task2, task3)
    values (@task1, @task2, @task3)
end

并使用此代码将数据从 (t1.col1) 检查的行保存到 (t2.task1 and t2.task2 and t2.task3)

Dim comm As New SqlCommand
    comm.Connection = sqlconn
    comm.CommandText = "saving_task"
    comm.CommandType = CommandType.StoredProcedure

    Dim i As Integer
    For i = 0 To DGV1.Rows.Count - 1
        If DGV1.Rows(i).Cells(0).Value = True Then

            comm.Parameters.AddWithValue("task1", DGV1.Rows(i).Cells(1).Value)
            comm.Parameters.AddWithValue("task2", DGV1.Rows(i).Cells(1).Value)
            comm.Parameters.AddWithValue("task3", DGV1.Rows(i).Cells(1).Value)
            'Else'

        End If

    Next
    sqlconn.Open()
    comm.ExecuteNonQuery()
    sqlconn.Close()
End Sub

当我尝试保存时,我在 comm.ExecuteNonQuery()

行出现错误

查询中的主要错误是您仅在循环结束后才调用 ExecuteNonQuery。这只执行命令一次而不是每一行,所以主要的修复是将 ExecuteNonQuery 移到循环内。

但是,如果您尝试对网格中的每一行重复使用相同的命令,则需要避免将相同的参数添加到相同的命令。您需要致电

 comm.Parameters.Clear()

在循环中添加相同的参数之前,但您也可以在进入循环之前定义参数并在每次循环时更改值

Dim comm As New SqlCommand
comm.Connection = sqlconn
comm.CommandText = "saving_task"
comm.CommandType = CommandType.StoredProcedure
comm.Parameters.Add("@task1", SqlDbType.NVarChar, 50)        
comm.Parameters.Add("@task2", SqlDbType.NVarChar, 50)    
comm.Parameters.Add("@task3", SqlDbType.NVarChar, 50)    
sqlconn.Open()
Dim i As Integer
For i = 0 To DGV1.Rows.Count - 1
    If DGV1.Rows(i).Cells(0).Value = True Then
        comm.Parameters("@task1").Value = DGV1.Rows(i).Cells(1).Value
        comm.Parameters("@task2").Value = DGV1.Rows(i).Cells(2).Value
        comm.Parameters("@task3").Value = DGV1.Rows(i).Cells(3).Value
        comm.ExecuteNonQuery()
    End If
Next
sqlconn.Close()

(请注意,我想您在要保存的单元格索引中有错字)