Den sqlilte Insert Befehl dynamisch zu erzeugen funktioniert nur teilweise

  • VB.NET
  • .NET 4.5

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von petaod.

    Den sqlilte Insert Befehl dynamisch zu erzeugen funktioniert nur teilweise

    Hallo,
    meine Ausgangsituation:
    Ich lese in ein DatagridView Werte aus einer Excel Datei ein.
    Der User soll Korrekturen vornehmen können.
    Anschliessend wird das Datagridview in eine Sqlite Datei gespeichert.

    Da sich die Spalten der Excel Dateien und damit des Datagridview zwischendurch ändern, möchte ich gerne den Insert Befehl dynamisch erzeugen, habe aber damit Probleme.
    Wäre super wenn jemand drübersehen könnte, wahrscheinlich mache ich einen Anfänger Fehler....

    Mein Datagridview = dgvUmsatz

    Ich versuche den Insert Befehl wie folgt zu erzeugen:

    Quellcode

    1. For i = 0 To dgvUmsatz.Columns.Count - 1
    2. insert1 &= dgvUmsatz.Columns(i).HeaderText & ", "
    3. values1 &= "'row.Cells('" & dgvUmsatz.Columns(i).HeaderText & "').Value', "
    4. Next


    Dann baue ich eine Verbindung zur SQLite DB auf und lese dann Zeilenweise das dgv aus.
    Der Insert Teil funktioniert
    Wenn ich den Values Teil manuell erzeuge klappt das Eintragen in die DB

    Quellcode

    1. For Each row As DataGridViewRow In dgvUmsatz.Rows
    2. sqlite_cmd2.CommandText = "INSERT INTO excel (" & insert1 & ") VALUES ('" & row.Cells("Lieferant").Value & "', '" & row.Cells("Name").Value & "', '" & row.Cells("Umsatz_VKP").Value & "', '" & row.Cells("Umsatz_EKP").Value & "', '" & row.Cells("KAA").Value & "', '" & row.Cells("Vorjahr_VKP").Value & "', '" & row.Cells("Vorjahr_EKP").Value & "', '" & row.Cells("Vorjahr_KAA").Value & "', '" & row.Cells("Differenz").Value & "', '" & row.Cells("Differenz_Proz").Value & "', '" & row.Cells("Ampel").Value & "', '" & row.Cells("N_Einkauf_Jahr").Value & "', '" & row.Cells("N_Einkauf_VJ").Value & "', '" & row.Cells("Differenz1").Value & "', '" & row.Cells("Differenz_Proz1").Value & "');"
    3. vbsqlite_cmd2.ExecuteNonQuery()
    4. Next


    Damit werden die Werte aus dem dgvUmsatz korrekt in die Sqlite DB geschrieben

    Wenn ich jedoch den oben erzeugten values1 einsetze, steht in jeder Zelle der DB nur der String drin, oder die Verarbeitung wird komplett abgebrochen mit SQL logic error

    Quellcode

    1. For Each row As DataGridViewRow In dgvUmsatz.Rows
    2. sqlite_cmd2.CommandText = "INSERT INTO excel (" & insert1 & ") VALUES ('" & values1 & "');"
    3. vbsqlite_cmd2.ExecuteNonQuery()
    4. Next


    Wie kann ich die Values dynamisch erstellen?
    Vielleicht ist es ja offensichtlich was ich falsch mache.... aber ich finde es nicht
    Dankeschön!

    *Topic verschoben*

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()

    benk schrieb:

    was ich falsch mache
    Wenn du dir die Strings vor der Ausführung anschaust, siehst du doch, dass da jeweils ein Komma zu viel am Schluss steht und zu viele Hochkommas zwischendrin.

    Besser du verwendest CommandParameters
    docs.microsoft.com/en-us/dotne…s?view=netframework-4.7.2
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --