Liebe/-r Experte/-in,
Im Forum hat leider keiner auf meine Frage geantwortet, deshalb auf diesem Weg; ich programmiere zurzeit mit VB.net in VS2008 mit einer SQL Server CE 3.5-Datenbank.
Folgender Sachverhalt:
Ich möchte innerhalb einer Tabelle einen Datensatz kopieren, wobei 2 Feldinhalte aber nicht aus dem kopierten Datensatz, sondern aus Variablen kommen. Den Inhalt dieser Variablen habe ich in Parameter gepackt und will sie nicht als Literale in den SQL-String nehmen (Stichwort „SQL Injection“).
Mein Code sieht so aus:
Dim Cmd As SqlCeCommand = GetDbCommand()
Dim SatzID As String = "1234"
Dim NeueSatzID As String = "9876"
Dim NeueParentID As String = "2345"
Cmd.Parameters.Clear()
Cmd.Parameters.AddWithValue("SatzID", SatzID)
Cmd.Parameters.AddWithValue("NeueSatzID", NeueSatzID)
Cmd.Parameters.AddWithValue("NeueParentID", NeueParentID)
Cmd.CommandText = "INSERT INTO MeineTabelle (SatzID, Feld1, Feld2, Feld3) " & \_
"SELECT @NeueSatzID, Feld1, @NeueParentID, Feld3 " & \_
"FROM MeineTabelle WHERE SatzID = @SatzID"
Cmd.ExecuteNonQuery()
Damit wirft er aber eine SqlCeException „Unzulässiger Parameter an diesem Ort. Stellen Sie sicher, dass das Symbol ‚@‘ sich an einem gültigen Ort befindet oder dass Parameter in dieser SQL-Anweisung gültig sind.“
Auch eine Umstellung des Befehls auf
Cmd.CommandText = "INSERT INTO MeineTabelle (SatzID, Feld2, Feld1, Feld3) " & \_
"VALUES (@NeueSatzID, @NeueParentID, (SELECT Feld1, Feld2 " & \_
"FROM MeineTabelle WHERE SatzID = @SatzID))"
wirft eine SqlException „Fehler beim Analysieren der Abfrage. [Token line number … Token in error = SELECT]“
Hast Du eine Idee? Das müsste doch zumindest so ähnlich funktionieren …
Vielen Dank fürs Lesen, Überlegen und Antworten!
Thomas