Eintrag in eine Tabelle vornehmen/SQL Server CE

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Eintrag in eine Tabelle vornehmen/SQL Server CE

    Hallo liebe Community,

    ich hoffe Ihr könnt mir weiter helfen, da ich folgende Fehlermeldung überhaupt nicht nachvollziehen kann und überhaupt keine Idee mehr hab.
    Es soll ein Eintrag in einer Tabelle gemacht werden.
    Das sieht bisher so aus:

    VB.NET-Quellcode

    1. Private Sub btn_VokabelHinzufügen(sender As Object, e As EventArgs) Handles btn_DB_erzeugen.Click
    2. If tb_Deutsch.Text = "" Or tb_Englisch.Text = "" Then
    3. MsgBox("Bitte trage in beide Textboxen ein Vokabel ein! ")
    4. Exit Sub
    5. End If
    6. SetSQL("Insert into Vokabeln (ENGcol1,DEUcol2) Values (" + tb_Englisch.Text + ", " + tb_Deutsch.Text + ")")
    7. 'SetSQL("Insert into Vokabeln (ENGcol1,DEUcol2) Values ("","")")
    8. End Sub


    Bei der

    VB.NET-Quellcode

    1. cmd.ExecuteNonQuery()
    erhalte ich diese Fehlermeldung :

    VB.NET-Quellcode

    1. {"Der Spaltenname ist ungültig. [ Node name (if any) = ,Column name = go ]"}

    Aber "go" ist in diesem Fall der Inhalt der Textbox "tb_Englisch.Text"
    Ich hab absolut kein Plan mehr, hoffe Ihr könnt mir helfen ?(
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    Zum einen, wie sieht dein erzeugtes SQL-Statement aus?
    Was passiert wenn du das Statement direkt übergibst und nicht die Inhalte der Textboxen?

    Arbeite dich in parametrisierte SQL-Statements ein. Dein Ansatz ist anfällig für SQL-Injection.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Zunächst einmal Danke für die rasche Antwort!

    Ich habe das wie folgt aufgebaut:

    VB.NET-Quellcode

    1. Private Sub CreateDatabase()
    2. Dim myEngine As New SqlCeEngine
    3. myEngine.LocalConnectionString = DB_connString
    4. If System.IO.File.Exists(DB_Path) = True Then
    5. Exit Sub
    6. Else
    7. myEngine.CreateDatabase()
    8. SetSQL("create Table Vokabeln (ENGcol1 nchar(100),DEUcol2 nchar(100))")
    9. End If
    10. End Sub


    VB.NET-Quellcode

    1. Private Sub btn_VokabelHinzufügen(sender As Object, e As EventArgs) Handles btn_DB_erzeugen.Click
    2. SetSQL("Insert into Vokabeln (ENGcol1,DEUcol2) Values (" + tb_Englisch.Text + ", " + tb_Deutsch.Text + ")")
    3. End Sub


    Und wenn ich versuche wie folgt zu übergeben:

    VB.NET-Quellcode

    1. SetSQL("Insert into Vokabeln (ENGcol1,DEUcol2) Values ("","")")


    bekomme ich sofort, sowie ich bei dem Value zwischen den Hochkommata schreiben möchte auch eine Fehlermeldung. Dann wird der Wert nicht mehr als String angesehen und der geschriebene Wert ändert seine Farbe in Schwarz. :S
    Schlimmer als ein Elefant im Porzellanladen, ist ein Igel in der Kondomfabrik und Nutella hat Lichtschutzfaktor 9,7 8)
    Naja das ist auch ziemlich klar. Du willst in einem String, der per doppeltem Hochkomma (") eingeleitet und geschlossen wird ein doppel Hochkomma schreiben, weil du einen String in die DB schreiben willst.

    Das geht natürlich schief. Versuche deinem String für das SQL-Statement Mal in einfaches Hochkomma (') zu setzen.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.