Hallo Experten,
als SQL-„Fortgeschrittener“ (jedoch bei weitem nicht Experte) gugel ich schon seit einer Stunde, aber ich finde nichts, was auf mein Problem passt. Bisher habe ich nur mit Oracle zu tun gehabt, jetzt soll aber eine Anwendung mit .net-Framework 3.5 und SQL Server CE 3.5 entstehen.
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 SqlCommand = 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]“
Hat von Euch jemand eine Idee? Das müsste doch zumindest so ähnlich funktionieren …
Danke!
Thomas