SQL INSERT in einer For..Next Schleife

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQL INSERT in einer For..Next Schleife

    Hallo

    Folgender Code funktioniert nicht so, wie ich das gern hätte. Ich möchte jede Zeile eines Listviews in einer mdb-Datenbank speichern.

    VB.NET-Quellcode

    1. cmd.CommandText = "INSERT INTO Tabelle " &
    2. "([Daten_1], [Daten_2], [Datum_A], [Datum_B) " & "VALUES(@Daten_1, @Daten_2, @Datum_A, @Datum_B)"
    3. For i = 0 To ListView.Items.Count - 1
    4. cmd.Parameters.AddWithValue("@Daten_1", ListView.Items(i).Text)
    5. cmd.Parameters.AddWithValue("@Daten_2", ListView.Items(i).SubItems(1).Text))
    6. cmd.Parameters.AddWithValue("@Datum_A", CDate(ListView.Items(i).SubItems(2).Text))
    7. cmd.Parameters.AddWithValue("@Datum_B", CDate(ListView.Items(i).SubItems(3).Text))
    8. Try
    9. con.Open()
    10. anzahl = anzahl + cmd.ExecuteNonQuery()
    11. con.Close()
    12. Catch ex As Exception
    13. MessageBox.Show(ex.Message)
    14. End Try
    15. Next


    Wenn ich die Schleife schrittweise durchgehe, sehe ich, dass er sich die Daten korrekt aus dem Listview holt. Bei 3 Zeilen im Listview speichert das Programm auch 3 Datensätze, aber 3mal die erste Zeile Ich habe also am Ende 3 identische Datensätze mit den Daten aus der ersten Listview-Zeile. Wo ist mein Denkfehler ?

    Danke für eure Hilfe und ein schönes Wochenende
    Also als erstes mal, musst du nicht jedemal ne neue connection auf machen. mach die einmal auf execute eine nachm anderen.
    Was ist das anzahl?

    probiers mal so:

    VB.NET-Quellcode

    1. Try
    2. cmd.CommandText = "INSERT INTO Tabelle " &
    3. "([Daten_1], [Daten_2], [Datum_A], [Datum_B) " & "VALUES(@Daten_1, @Daten_2, @Datum_A, @Datum_B)"
    4. con.Open()
    5. For i = 0 To ListView.Items.Count - 1
    6. cmd.Parameters.AddWithValue("@Daten_1", ListView.Items(i).Text)
    7. cmd.Parameters.AddWithValue("@Daten_2", ListView.Items(i).SubItems(1).Text))
    8. cmd.Parameters.AddWithValue("@Datum_A", CDate(ListView.Items(i).SubItems(2).Text))
    9. cmd.Parameters.AddWithValue("@Datum_B", CDate(ListView.Items(i).SubItems(3).Text))
    10. cmd.ExecuteNonQuery()
    11. cmd.dispose()
    12. Next
    13. con.close()
    14. Catch ex As Exception
    15. MessageBox.Show(ex.Message)
    16. End Try
    jo... @TE: Es ist sehr ratsam, Code ordentlich formatiert einzustellen - inklusive der Einrückungen.
    Das hilft Fehler sehen.
    Ebenfalls ratsam ist, immer ganze Methoden zu posten, nicht irgendwelche verlorenen Zeilen.
    Da wäre viel klarer zu sehen gewesen, dass das cmd nur einmal erzeugt wurde, und dann mit immer mehr und mehr Parametern vollgefüllt wird.