Syntax Fehler in INSERT INTO Anweisung

  • VB.NET

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

    Syntax Fehler in INSERT INTO Anweisung

    Hallo!

    Ich stehe völlig auf dem Schlauch und bräuchte mal eure Hilfe. Ich kreige immer wieder den Fehler das meine INSERT INTO Anweisung falsch sein soll (Syntaxfehler) aber ich kann den Fehler nicht finden!
    Hier der Code:

    VB.NET-Quellcode

    1. cmdNeuerPlan.CommandText = "INSERT INTO Pläne (Bezeichnung, Thema, Planart, Erstelldatum, Sonstiges, Index, ProID) values ('" & txtBezeichnung.Text & "', '" & txtInhalt.Text &
    2. "', '" & cbPlanArtwahl.SelectedItem.ToString & "', '" & txtDatum.Text & "', '" & txtSonstiges.Text & "', '" & cbIndex.SelectedItem.ToString & "', '" &
    3. projektID(cbProjektwahl.SelectedIndex) & "')"


    Die Tabellenstruktur stimmt und einen Syntaxfehler kann ich nicht erkennen.

    Ich habe mir den Command Text anzeigen lassen und kann auch nach eingabe der Daten keinen Fehler erkennen.


    Bin ich blind?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BeKos“ ()

    cmdNeuerPlan.CommandText = "INSERT INTO Pläne (Bezeichnung, Thema, Planart, Erstelldatum, Sonstiges, Index, ProID) VALUES ('" & txtBezeichnung.Text & "', '" & txtInhalt.Text &
    "', '" & cbPlanArtwahl.SelectedItem.ToString & "', '" & txtDatum.Text & "', '" & txtSonstiges.Text & "', '" & cbIndex.SelectedItem.ToString & "', '" &
    projektID(cbProjektwahl.SelectedIndex) & "')"


    fehlermeldung ?

    mach mal nen try catch
    Am ende das "')" ist als "Kommentar" gekennzeichnet das ist dein Fehler

    Aber ich muss das Hochkomma doch setzen um den SQL Befehl richtig zu schrieben? Wie kann ich das umgehen?

    VB.NET-Quellcode

    1. cmdNeuesProjekt.CommandText = "INSERT INTO Projekte (Bezeichnung, Architekt, Bauherr, Baufirma, Bauleitung, Haustechnik, Stahlbau, Anmerkung, Prüfer) values ('" &
    2. txtProjektname.Text & "', '" & txtArchitekt.Text & "', '" & txtBauherr.Text & "', '" & txtBaufirma.Text & "', '" & txtBauleitung.Text & "', '" & txtHaustechnik.Text &
    3. "', '" & txtStahlbau.Text & "', '" & txtAnmerkungen.Text & "', '" & txtPrüfer.Text & "')"


    Dieser Befehl wird komischerweise Problemlos ausgeführt. ?(

    @steve: Die Anweisungen stehen in einem Try Catch Block. Der meldet mir den Syntaxfehler und bricht ab.
    Ok mein Fehler.
    Das "Kommentar" scheint seitens Forensoftware erkannt zu sein.
    Hast du schon ExeCuteNonQuery ausgeführt ?

    Hi,

    ich glaub das liegt nur an dem BBCode hier.
    Weil das ist innerhalb des Stringes da kann er nicht kommentieren.

    Aber hilfreich wäre, wie ist die Tabelle aufgebaut? Welche Datentypen haben die Felder?

    Ich vermute mal das ProID kein CHAR ist sondern ein Int und dann musst du die ' ' weglassen oder eventuell auch beim Index
    Wenn du Try-Catch benutzt werf den mal weg

    Mek.... MySQL Erkennt keine Umlaute (Ä,Ö,Ü) das gleiche Problem hatte ich auch mal und wie ich ae,oe ... geschrieben habe, siehe da, es funzt

    Am Ä lags leider auch nicht... hier mal der gesamte Try Block:

    VB.NET-Quellcode

    1. Try
    2. conNeuerPlan.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & datenbankOrdner & ""
    3. cmdNeuerPlan.Connection = conNeuerPlan
    4. conNeuerPlan.Open()
    5. cmdNeuerPlan.CommandText = "INSERT INTO Plaene (Bezeichnung, Thema, Planart, Erstelldatum, Sonstiges, Index, ProID) values ('" & txtBezeichnung.Text & "', '" & txtInhalt.Text &
    6. "', '" & cbPlanArtwahl.SelectedItem.ToString & "', '" & txtDatum.Text & "', '" & txtSonstiges.Text & "', '" & cbIndex.SelectedItem.ToString & "', '" &
    7. projektID(cbProjektwahl.SelectedIndex) & "' ) "
    8. MessageBox.Show(cmdNeuerPlan.CommandText)
    9. anzahlZeilen = cmdNeuerPlan.ExecuteNonQuery()
    10. If anzahlZeilen = 1 Then
    11. MessageBox.Show("Neuer Plan eingetragen!")
    12. Me.Close()
    13. Else
    14. MessageBox.Show("Fehler! Plan nicht angelegt!")
    15. End If
    16. conNeuerPlan.Close()
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message)
    19. End Try

    icemanns schrieb:

    Hi,

    ich glaub das liegt nur an dem BBCode hier.
    Weil das ist innerhalb des Stringes da kann er nicht kommentieren.

    Aber hilfreich wäre, wie ist die Tabelle aufgebaut? Welche Datentypen haben die Felder?

    Ich vermute mal das ProID kein CHAR ist sondern ein Int und dann musst du die ' ' weglassen oder eventuell auch beim Index

    und ich hoffe du hast nicht einfach nur im Source aus ä ae gemacht sondern auch die Tabelle umgenannt.
    Mach den Try-Catch mal weg dann bekommst du die Zeile des Fehlers angezeigt.

    Wenn du nicht drauf antwortest auch gut, aber dann kann dir auch keiner wirklich helfen.
    Da es sehr verdächtig nach einem solchen Fehler aussieht, also das irgendwo der falsche Dateityp gesetzt wird bei deinem INSERT.

    So long und viel Spaß bei der Fehlersuche

    @Patrick die Zeile ist doch klar wenn der SQL Fehler einen Syntax error zurück gibt -.-
    @icemans:
    Wenn er den Try-Catch wegmacht, kann man aber besser sehen wo der fehler ist dann kann man den auch besser beheben. Darum geht es mir um nichts anderes.

    Patrick1993 schrieb:

    @icemans:
    Wenn er den Try-Catch wegmacht, kann man aber besser sehen wo der fehler ist dann kann man den auch besser beheben. Darum geht es mir um nichts anderes.
    Er könnte anstatt ex.Message auch einfach ex.ToString() ausgeben und man hat das selbe Ergebnis ;) Aber es wird kommen das der SQL-Server einen Fehler zurückgegeben hat mit Syntax Error ;)
    Aber ist ja jetzt egal.
    Ihr lagt leider alle falsch. Es lag an der Feldbezeichnung Index. Scheint iwie belegt zu sein. Habe die Spalte jetzt umbenannt in laufNr und siehe da, es funktioniert. Danke für eure Mühen.

    @iceman: Die Tabellenstruktur rauszuschreiben hätte euch auch nicht weiter gebracht, da konnte der Fehler nicht liegen. Sollten Felder falsch beschrieben werden etc. dann zeigt er keinen Syntax Fehler an sondern sagt dir ziemlich genau was da los ist.
    Am Besten immer DB-Parameter verwenden.

    Beispiel:

    VB.NET-Quellcode

    1. Try
    2. conNeuerPlan.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & datenbankOrdner & ""
    3. cmdNeuerPlan.Connection = conNeuerPlan
    4. conNeuerPlan.Open()
    5. cmdNeuerPlan.CommandText = "insert into test (id, teststring) values (@id, '@teststring')"
    6. cmdNeuerPlan.Parameters.Clear()
    7. cmdNeuerPlan.Parameters.Add("@id", SqlDbType.Int).Value = TextBox1.Text
    8. cmdNeuerPlan.Parameters.Add("@teststring", SqlDbType.VarChar).Value = TextBox1.Text
    9. cmdNeuerPlan.ExecuteNonQuery()
    10. conNeuerPlan.Close()
    11. Catch ex As Exception
    12. MessageBox.Show(ex.Message)
    13. End Try


    Nur als Anschauungsbeispiel

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten