当我尝试通过 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()
(请注意,我想您在要保存的单元格索引中有错字)
我有一个 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()
(请注意,我想您在要保存的单元格索引中有错字)