Syntax Fehler in Insert Into

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von muecke3.16.

    Syntax Fehler in Insert Into

    Mir bringt es einen Syntaxfehler in einer Insert Into anweisung, aber irgendwie finde ich den fehler nicht,
    auch nachmehrmaligem Probieren.
    hoffe einer von euch kann mir helfen

    In meiner Datenbank gibts die Dabelle "TVNodes" mit den Einträgen: ID (Autowert), ParentID(Zahl), ChildID(Zahl), Text(Text), Tag(Text)
    hier der String:

    VB.NET-Quellcode

    1. Dim sql = "INSERT INTO TVNodes (ParentID, Text, Tag) VALUES ('" & 0 & "', 'HaupttreeNode', '" & Text & "')"


    Vielen Dank schonmal für die Hilfe.
    Wenn ID einen autowert - ich denke mal Autoincrement - hat dann musst du sie nicht mit angeben, weil sonst definierst du ja die ID.

    Also ich habe es in VB noch nie gemacht, denke aber es ist identisch wie in PHP und SQL


    SQL-Abfrage

    1. Dim sql = "INSERT INTO TVNodes (Text, Tag) VALUES ('HaupttreeNode', '" & Text & "')"


    Versuchs mal so. Du kannst zwar Autoincremet auch ein Wert zuweisen aber das willste ja nicht.

    Edit:
    Achso was steht in "Text" drinne?? Wenn dort ' oder ` oder " zeichen drin sind kommt es zu sogenannten SQL Injection. Du musst diese Zeichen erst escapen. Z.b. mit einer Replace Funktion

    Quellcode

    1. Replace("`", "\`")
    2. Replace("'", "\'")
    hmm nein, mein aufbau der Tabelle sieht folgendermaßen aus:

    Hinweis ; ist ein Trennzeichen

    ID(Autowert); ParentID(Zahl); Text(Text) ;Tag(Text)

    1;0;HauptTreeNode;internetseiten
    2;0;HauptTreeNode;betriebssysteme
    3;0;HauptTreeNode;prgrammiersprachen
    4;1;SubTreeNode;ebay.de
    5;1;SubTreeNode;vbarchiv.de
    6;1;SubTreeNode;activevb.de
    7;2;SubTreeNode;windows
    8;2;SubTreeNode;linux
    9;2;SubTreeNode;unix
    10;3;SubTreeNode;VB.NET
    11;3;SubTreeNode;C#
    12;3;SubTreeNode;PHP

    nun möchte ich aber eine weitere zeile hinzufügen zb:

    13; 0; HauptTreeNode; Irgendwas


    verstehste was ich mein?


    Edit: in "text" stehen nur Buchstaben drin!!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „muecke3.16“ ()

    Ja verstehe ich, aber wenn es nur solche Texte sind, ohne irgendwelche Sonderzeichen, wunderts micht. Also der SQL Befehlt sieht korrekt aus.

    Haste mal probiert einfach ohne irgendeine Variable das testhalber zu machen?


    SQL-Abfrage

    1. Dim sql = "INSERT INTO TVNodes (ParentID, Text, Tag) VALUES ('0', 'HaupttreeNode', 'ebay.de')"



    Achso da fällt mir noch ein, wenn du in die ParentID eine 0 schreiben willst darfst es nicht '& 0 &', weil das ist dann NULL also nichts im prinzip.


    SQL-Abfrage

    1. Dim sql = "INSERT INTO TVNodes (ParentID, Text, Tag) VALUES ('0', 'HaupttreeNode', '" & Text & "')"


    So könnte es gehen!

    komisch, er bringt mir trotzdem den Fehler mehr "Syntaxfehler in der INSERT INTO-Anweisung."

    VB.NET-Quellcode

    1. Dim Text As String
    2. Text = txtneuerKnoten.Text
    3. If CheckBox1.Checked Then
    4. Dim conn As New System.Data.OleDb.OleDbConnection
    5. conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\key2.mdb;Jet OLEDB:Database Password=" + frmMain.Passwort
    6. conn.Open()
    7. 'SQL Befehl für das Auslesen
    8. Dim sql = "INSERT INTO TVNodes (ParentID, Text, Tag) VALUES ('0', 'HaupttreeNode', '" & Text & "')"
    9. 'Dim cmd As SqlCommand = New SqlCommand(sql, conn)
    10. Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, conn)
    11. Dim dr As OleDb.OleDbDataReader
    12. dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
    13. conn.Close()
    14. End If


    Edit: Ohne Variable bringt er mir auch den selben Fehler.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „muecke3.16“ ()

    @Gaga: SQL ist das egal, das ist nicht so Typ orientiert wie VB. Du kannst eine Zahl ebensogut als String übergeben, wenn die Spalte einen Integerwert erwartet, wird der einfach umgewandelt und wenn es wirklich ein String ist, wird der Integerwert 0 eingesetzt.

    Das Einzige was mir noch einfallen würde, wie ich es mit MySQL auch immer mache. Die Spaltennamen in ` setzten. Damit es nicht zu verwechslungen kommt, wenn eine Spalte mal so heißt wie ein SQL Befehl.

    "INSERT INTO `TVNodes` (`ParentID`, `Text`, `Tag`) VALUES (0, 'HaupttreeNode', '" & Text & "')"

    Wenn das nicht funktionieren sollte, bin ich mit meinem Latein auch am ende.
    hmm da kommt nun folgende Fehlermeldung:
    Die INSERT INTO-Anweisung enthält folgenden unbekannten Feldnamen: ''ParentID''. Stellen Sie sicher, dass Sie den Namen richtig eingegeben haben, und führen Sie dann die Operation nochmals aus.




    kann es vlt daran liegen dass ich in
    INSERT INTO TVNodes (ParentID, Text, Tag)
    das Text nicht mit der Datenbank verträgt, weil es ja auch ein Datentyp in der Datenbank ist??
    @Dodo
    @Gaga: SQL ist das egal, das ist nicht so Typ orientiert wie VB. Du kannst eine Zahl ebensogut als String übergeben, wenn die Spalte einen Integerwert erwartet, wird der einfach umgewandelt und wenn es wirklich ein String ist, wird der Integerwert 0 eingesetzt
    Aber nicht bei jeder Datenbank

    Wenn ParentID in der Datenbank als Zahl definiert ist funktioniert das bei Access und SQL-Server:

    VB.NET-Quellcode

    1. "INSERT INTO TVNodes (ParentID) VALUES (0)"

    und das nicht:

    VB.NET-Quellcode

    1. "INSERT INTO TVNodes (ParentID) VALUES ('0')"


    das Text nicht mit der Datenbank verträgt, weil es ja auch ein Datentyp in der Datenbank ist??

    Das kann durchaus sein, kommt auf die verwendete DB an.
    Wenn ja dann so

    VB.NET-Quellcode

    1. "INSERT INTO TVNodes (ParentID, [Text], Tag) VALUES (0, 'HaupttreeNode', '" & Text & "')"
    noch ne kleine Frage
    versuche gerade was in eine combobox reinzuschreiben
    aber irgendwie gibt es mir das reingeschriebene nicht an die variable,
    Hab ich die falschen Tags benutzt??
    habe es mit: CBoxKnoten.SelectedItem
    und: CBoxKnoten.SelectedText
    versucht.