循环Datagridview行和Insert to Oracle

时间:2016-09-12 10:34:04

标签: vb.net oracle datagridview

我需要遍历Datagridview行并在Oracle DB表中插入每一行。这应该通过检查第一个单元格是否为空来完成。这是我到目前为止所尝试的:

For Each row As DataGridViewRow In DataGridView1.Rows    
     If row.Cells(0).Value = Nothing Then   
           'Do nothing    
     Else   
            Dim test = row.Cells(0).Value.ToString
            'MsgBox(test)

            Const SQL1 As String = "INSERT INTO MyTable2 (ID_Table2, ID_Table1, TEST)
                           VALUES(ID_Table2_seq.nextval,ID_Table1_seq.currval,: test)"

            cmd.CommandText = SQL1
            cmd.Parameters.Add(New OracleParameter("test", test))

            cmd.ExecuteNonQuery()          
     End If
Next

我收到错误:

  

外部组件抛出异常。

已经设置

cmd并连接到OracleDB。

ID_Table2_seq.nextvalID_Table1_seq.currval是在Oracle中创建的序列。如果我删除添加参数并在Msgbox中显示test值,则可以正常工作。

1 个答案:

答案 0 :(得分:0)

解决。因为每个循环都被转过来,它首先保留了错误的值。我还必须添加另一个“OracleCommand”。这很有效:

For Each row As DataGridViewRow In DataGridView1.Rows    

   If row.Cells(0).Value <> Nothing Then   

        Using cmd1 As OracleCommand = New OracleCommand()
            cmd1.Connection = con

             Dim SQL1 As String = "INSERT INTO MyTable2 (ID_Table2, ID_Table1, TEST)
                               VALUES(ID_Table2_seq.nextval,ID_Table1_seq.currval,: test)"
             cmd1.Parameters.Add(New OracleParameter("test", row.Cells(0).Value.ToString))
             cmd1.CommandText = SQL1
             cmd1.ExecuteNonQuery() 

         End Using

   Else

   End If

 Next

有关为何会发生这种情况的任何解释?