0

從表中的數據保存到另一個我有一個DataGridView讀取(T1)的數據,我想將數據保存到另一個表(t2)和程序當我試圖通過datagridview的

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 

enter image description here

並使用此代碼從(T1。COL1)保存數據檢查行(t2.task1和t2.task2和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()

+1

您可以加入收到確切的錯誤的messge一個錯字保存)?爲什麼每行都保存單元格(1)的值? – Steve

回答

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() 

更改值(請注意,我假設您在單元格的指數

+0

我調用同一個小區,因爲我要帶從第一臺同一列中的值,當我嘗試這個代碼在第二個表 –

+0

一行保存這個值: comm.Parameters(「@ TASK1」)值= DGV1.Rows(1).Cells(1).value的 comm.Parameters( 「@ TASK1」)。值= DGV1.Rows(2).Cells(1).value的 它工作,但我想讓它在運行我檢查過的所有行 –

+0

這就是您檢查單元格的原因(0)您是否意味着代碼更新所有行也是未選中的行? – Steve