INSERT INTO mit mehreren Values will ein Semikolon

  • VB.NET

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

    INSERT INTO mit mehreren Values will ein Semikolon

    Hey,

    ich will per OleDB mehrere Datensätze in eine Tabelle einfügen. Da es um die 5000-6000 Datensätze sein werden, will ich nicht jedes mal einen Query schicken.

    Deswegen habe ich mich erkundigt, wie man mehrere Datensätze per INSERT-Anweisung einfügt. Mein Querystring sieht jetz wie folgt aus:

    SQL-Abfrage

    1. INSERT INTO 0 (Zeitwert, Istwert, Sollwert) VALUES (1, 20, 1), (1, 20, 2)


    Die Sub zum Ausführen sieht wie folgt aus:

    VB.NET-Quellcode

    1. Public Sub ExecuteNonQuery(ByVal strCommand As String, ByVal strMsg As String, ByVal strParameter As String)
    2. cmd.CommandText = strCommand
    3. If Not strParameter = "" Then
    4. cmd.Parameters.Add(New OleDbParameter With {.Value = strParameter})
    5. End If
    6. Try
    7. conn.Open()
    8. cmd.ExecuteNonQuery()
    9. If Not strMsg = "" Then MsgBox(strMsg)
    10. Catch ex As Exception
    11. MsgBox(ex.Message)
    12. End Try
    13. cmd.Parameters.Clear()
    14. conn.Close()
    15. End Sub



    strParameter und strMsg sind auf "", haben also keinen Einfluss.


    Zur Fehlermeldung:
    Wenn der Befehl abgesendet wird, bekomme ich die Fehlermeldung: "Fehlendes Semikolon (;) am Ende der SQL-Anweisung"!

    Ich habe schon nen ; dahinter gehangen etc, hat leider nichts gebracht.

    Hat jemand ne Idee?

    SQL-Abfrage

    1. INSERT INTO bla (feld1, feld2) VALUES (1,2);
    2. INSERT INTO bla (feld1, feld2) VALUES (3,4);
    3. INSERT INTO bla (feld1, feld2) VALUES (5,6);
    4. INSERT INTO bla (feld1, feld2) VALUES (7,8);


    SQL ist wie C, PHP etc. Ein ";" trennt die einzelnen "Zeilen" bzw Anweisungen. Einfach mal nen Komplett-Export machen dann sieht man ja die vielen INSERT Befehle.

    Mephisto schrieb:

    will ich eben NICHT mehrere Befehle absenden

    Ist mir ehrlich gesagt ziemlich egal, was du "willst". Ich hab dir nur gezeigt was GEHT. Und SQL (wie fast jede Programmiersprache) erwartet nunmal, dass ein Befehl irgendwann zu Ende ist und dann der nächste kommt.

    Wie gesagt: Einfach mal die Datenbank komplett exportieren und sich dann den Inhalt (ist ja plain text) anschauen. Da sieht es genau so aus, wie oben beschrieben. Warum sollte der Server es sich selbst schwerer machen, wenns auch "einfacher" ginge?

    Außerdem schriebest du das du nicht so viele "queries" schicken willst. Alle Befehle in einen String, per ExecuteNonReader ausführen, done. qed

    (Intern arbeitet der Server den Megastring natürlich "zeilenweise" ab, aber das braucht einen ja nicht kümmern)