SQL Syntex error bei Tabelleneintrag

  • VB.NET
  • .NET (FX) 1.0–2.0

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

    SQL Syntex error bei Tabelleneintrag

    Hallo zusammen,
    Ich habe folgendes Problem und zwar möchte ich per Text box und Combo Boxen einen Tabellen eintrag machen das ganze wird mit einem button abgeschickt.
    Hier das was ich bis jetzt habe:

    C#-Quellcode

    1. MysqlCon = New MySqlConnection
    2. MysqlCon.ConnectionString = "Datenbank connection hab ich richtig drinne"
    3. Try
    4. MysqlCon.Open()
    5. Dim query As String
    6. query = "INSERT INTO lst (Datum) VALUES ('" & TextBox1.Text & "'), INSERT INTO lst (Uhrzeit) VALUES ('" & TextBox2.Text & "'), INSERT INTO lst (Art) VALUES ('" & ComboBox1.Text & "'), INSERT INTO lst (Anrufer) VALUES ('" & TextBox3.Text & "'), INSERT INTO lst (Straße) VALUES ('" & ComboBox2.Text & "'), INSERT INTO lst (Nr) VALUES ('" & TextBox4.Text & "'), INSERT INTO lst (Ort) VALUES ('" & ComboBox4.Text & "'), INSERT INTO lst (Meldung) VALUES ('" & ComboBox3.Text & "'), INSERT INTO lst (ENummer) VALUES ('" & TextBox5.Text & "'), INSERT INTO lst (weitere_informationen) VALUES ('" & RichTextBox1.Text & "'),"
    7. MysqlCmd = New MySqlCommand(query, MysqlCon)
    8. MysqlReader = MysqlCmd.ExecuteReader
    9. MysqlCon.Close()
    10. Catch ex As MySqlException
    11. MessageBox.Show(ex.Message)
    12. End Try
    13. End Sub


    Folgender Error kommt : You have an error in your SQL syntax; check the manual
    that corresponds to your MySQL server version for the right syntax to use
    near 'INSERT INTO lst (Uhrzeit) VALUES ('04:02'), INSERT INTO lst (Art)
    VALUES ('BMA')' at line 1

    Danke an alle Im voraus
    Dein SQL Statement ist falsch. Richtig wäre:

    INSERT INTO TabelleA (Spalte1, Spalte2, Spalte3) VALUES(Wert1, Wert2, Wert3)

    -> Hätte man in 2 Sekunden googlen können... „sql insert“ erstes Suchergebnis

    Damit du was lernst, hier ein Wichtiger Hinweis: Arbeite mit den SQLParameterCommand Paramtern.
    docs.microsoft.com/de-de/dotne…?view=dotnet-plat-ext-3.1
    Dein jetziges SQL ist nicht sicher -> SQL Injection. Zudem ist die Arbeit ist Parametern deutlich komfortabler und dein SQL Statement ist nicht „anfällig“ wenn in einem Feld (oder Textbox) ein ' oder \ steht was beim Schreiben oder Lesen Probleme macht.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Deine SQL Abfrage ist sehr schwer lesbar.
    Ich empfehle dir String.Format zu benutzen.
    Damit kannst du die lesbarkeit deutlich verbessern!
    :thumbup:

    VB.NET-Quellcode

    1. String.Format("INSERT INTO lst (Datum) VALUES ('{0}')", Me.TextBox1.Text)

    Visual Basic.NET 8o
    MS-SQL
    8o

    Cheffboss schrieb:

    String.Format("INSERT INTO lst (Datum) VALUES ('{0}')", Me.TextBox1.Text)
    Noch lesbarer wäre eine interpolierter String:

    VB.NET-Quellcode

    1. Dim SqlCmd = $"INSERT INTO lst (Datum) VALUES ('{TextBox1.Text}')"

    Aber auch das ist nicht zu empfehlen, wie @mrMo ja schon hinreichend erklärt hat.
    Sauber und gefahrlos sind in diesem Fall nur SQL-Parameter.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke an alle für eure Hilfreichen Antworten es hat geklappt nun stehe ich vor dem nächsten Problem was so ähnlich ist

    VB.NET-Quellcode

    1. MysqlCon.Open()
    2. Dim query As String
    3. If Form3.ComboBox1.SelectedItem = "SD 1 MTF 1" Then
    4. query = "INSERT INTO Fahrzeuge (sd1mtf1) VALUES ('1')"
    5. MysqlCmd = New MySqlCommand(query, MysqlCon)
    6. MysqlReader = MysqlCmd.ExecuteReader
    7. MysqlCon.Close()
    8. End If


    Also auf Form 3 ist eine Combobox wenn man ein Fahrzeug dort auswählt kommt man auf eine nächste Form diese soll den Tabellen eintrag auf 1 ändern
    Das ist mit deinem Ansatz nicht mehr sinnvoll lösbar.
    Imo musst du Umstellen auf Verwendung eines typisiertem Datasets, Databinding und DataAdaptern.
    Gefrickel mit einzelnen Commands bleibenlassen, nämlich den DataAdaptern überlassen.

    Databinding ist das einzige, was ermöglicht, dass ein (anderes) Form automatisch bemerkt, wenn die Daten sich geändert haben.
    Aber auch nur in einer fortgeschrittenen Databinding-Variante, dem "formübergreifendem Databinding".

    Tutorials dazu finden sich im Datenbank-Tutorial-Bereich.

    Das einfachste ist übrigens, die Datenbank erstmal ganz wegzulassen - eine Datenbank hinterlegen kann man später immer noch.
    So kannst du eine Baustelle nach der anderen fertigstellen, und es muss nicht alles gleichzeitig und richtig aufeinander abgestimmt gelingen.