2016-09-12 16 views
0

Ich muss Datagridview Zeilen durchlaufen und jede Zeile in Oracle DB-Tabelle einfügen. Dies sollte getan werden, indem überprüft wird, ob die erste Zelle leer ist oder nicht. Hier ist, was ich versuchte, so weit:Loop Datagridview Zeilen und Einfügen zu Oracle

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 

ich Fehler:

External component has thrown an exception.

cmd ist allready gesetzt und mit OracleDB.

ID_Table2_seq.nextval und ID_Table1_seq.currval sind in Oracle erstellte Sequenzen. Und wenn ich hinzufügen Parameter und zeige nur test Wert in Msgbox funktioniert es.

Antwort

0

Gelöst. Für jede Schleife wurde umgedreht, es lag zuerst falscher Wert. Ich musste auch noch einen "OracleCommand" hinzufügen. Dies hat funktioniert:

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 

Eine Erklärung, warum dies geschieht?

Verwandte Themen