【问题标题】:When I try to save data from table to another by datagridview当我尝试通过 datagridview 将数据从表保存到另一个时
【发布时间】:2016-05-28 13:13:26
【问题描述】:

我有一个 datagridview 从 (t1) 读取数据,我想用一个过程将数据保存到另一个表 (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() 行出现错误

【问题讨论】:

  • 您能否添加收到的确切错误消息?为什么要为每一行保存 Cells(1) 的值?

标签: sql-server vb.net stored-procedures datagridview insert-into


【解决方案1】:

查询中的主要错误是您仅在循环结束后才调用 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()

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

【讨论】:

  • 我调用同一个单元格是因为我想从第一个表的同一列中获取值并将这些值保存在第二个表的一行中
  • 当我尝试这段代码时: comm.Parameters("@task1").Value = DGV1.Rows(1).Cells(1).Value comm.Parameters("@task1").Value = DGV1.Rows(2).Cells(1).Value 它可以工作,但我想让它在我检查的所有行中运行
  • 这就是您检查 Cell(0) 的原因您的意思是代码更新了所有行以及未检查的行吗?
  • 对不起,我不明白你的问题是什么
  • 问题是我希望循环在单元格(0)上运行以检查它是否检查,然后仅从检查的行中获取值并将值放在第二个表中的 1 行但是当我使用此代码: comm.Parameters("@task1").Value = DGV1.Rows(1).Cells(1).Value 它给了我固定值
猜你喜欢
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2019-03-30
相关资源
最近更新 更多