The parameterized query '(xxx)UPDATE xxx' expects the parameter '@xxx, which was not supplied - Updatefunktion mit Parametern verknüpfen

  • VB.NET

    The parameterized query '(xxx)UPDATE xxx' expects the parameter '@xxx, which was not supplied - Updatefunktion mit Parametern verknüpfen

    Hi,

    um dataAdapter besser zu verstehen habe ich beschlossen für das aktuelle Projekt keine Library zu benutzen und sämtliche SQL-Befehle etc. selbst zu schreiben. Das Befüllen von DataTables funktioniert auch ohne Probleme. Nur das Speichern will nicht so recht.

    Befüllen:

    VB.NET-Quellcode

    1. Dim sqlc As New SqlCommand("SELECT * FROM PumpVariant", sqlConVersand)
    2. sqlPumpVarAdapter = New SqlDataAdapter(sqlc)
    3. sqlPumpVarAdapter.Fill(PumpVariant)


    Speichern:

    VB.NET-Quellcode

    1. Dim sqlupdate As New SqlCommand("UPDATE PumpVariant SET pumpCount = @pumpcount, pname = @pname WHERE id = @id", sqlConVersand)
    2. sqlupdate.Parameters.Add("@pumpcount", SqlDbType.Int)
    3. sqlupdate.Parameters.Add("@pname", SqlDbType.NVarChar, -1)
    4. sqlupdate.Parameters.Add("@id", SqlDbType.Int)
    5. sqlPumpVarAdapter.UpdateCommand = sqlupdate
    6. sqlPumpVarAdapter.Update(PumpVariant)


    Wenn ich einen Wert ändere und Speichern drücke erkennt der DataAdapter korrekt, dass ein UpdateCommand ausgeführt werden muss (ohne Änderung kommt kein Fehler beim Speichern, bzw. wenn ich lösche kommt ein Fehler, dass kein Löschbefehl definiert ist).

    Diese Meldung hier kommt beim Speichern: "The parameterized query '(@pumpcount int,@pname nvarchar(max) ,@id int)UPDATE PumpVariant' expects the parameter '@pumpcount', which was not supplied."
    Die Parameter pumpcount, pname, id sind gleichnamig mit den Einträgen in der zugehörigen DataTable. Trotzdem werden die Werte nicht an den SQL-Befehl übergeben. Wie verknüpfe ich die?

    PS: Mein Ansatz ist an dieses C#-Beispiel angelehnt: docs.microsoft.com/de-de/dotne…and?view=netframework-4.8

    PS2: Ich habe jetzt eine funktionierende Lösung, die den CommandBuilder benutzt.

    VB.NET-Quellcode

    1. ​Dim cb As New SqlCommandBuilder(sqlPumpVarAdapter)
    2. sqlPumpVarAdapter.UpdateCommand = cb.GetUpdateCommand()


    Aber ich würde trotzdem gerne verstehen, wieso das manuelle Erstellen des Befehls nicht funktioniert. :)
    Option strict = on

    If it's stupid and it works it ain't stupid.

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