none
für mindestens einen Parameter wurde kein Wert eingegeben - Fehler bei SQL Update Aceess - Visual Basic

    Frage

  • Hallo 

    ich habe folgenden Connection String:

     com.CommandText = "Update tblFinanzen Set IDF = '" & idF & "',Datum = '" & dateF & "',Kategorie = '" & categorie & "',Obsevacion = '" & obsevacion & "',Corresponde = '" & corresponde & "',Debito = '" & debito & "',Credtio  = '" & credito & "' Where ID = " & idAutowert & ";"

    und bekomme jedesmal die Fehlermeldung:

    für mindestens einen Parameter wurde kein Wert eingegeben

    die Felder Credito und Debotp sowie IDF sind Zahlen Felder aber auch wenn ich die Quotes weglasse bekomme ich die Meldung trotzdem

    Gruss

    Dienstag, 10. Juli 2018 16:04

Antworten

  • Hi,

    Datum ist ein reserviertes Wort, ich nehme mal an, dass das Problem daher kommt.

    Pack den Spaltennamen mal in [...], dann sollte es gehen. Falls nicht, prüf nochmal alle Spaltennamen. "Credtio" sieht für mich falsch aus, da deine Variable "credito" heißt und es daher einen Unterschied gibt.

    Zudem solltest Du auch aus Gründen der Sicherheit (dein Code verursacht ein ziemliches SQL Injection Problem) ausschließlich mit Parametern (in deinem Fall OleDbParameter) arbeiten.

    Wichtig bei den OleDbCommand Parametern ist die Reihenfolge das Hinzufügens. Die muss mit der Reihenfolge der Parameter im SQL Statement (Ausnahmen gibt es bspw. bei Subselects) übereinstimmen.

    Du kannst auch anstelle von ? mit "benannten" Parametern, also bpw @Name, @ID, ... arbeiten. Die Namen sind bei OleDbCommand aber Schall und Rauch, das einzig wichtige ist die Reihenfolge wie oben geschrieben. Für eine bessere Übersicht verwende ich aber in der Regel auch Namen.

    String sqlStatement = "UPDATE <Tabelle> SET <Spalte1> = @Wert1, <Spalte2> = @Wert2 WHERE <Spalte3> = @Wert3";
    OleDbConnection connection = new OleDbConnection( connectionString );
        connection.Open();
     
    OleDbCommand command = new OleDbCommand( sqlStatement, connection );
        command.Parameters.AddWithValue( "@Wert1", "Wert 1" );
        command.Parameters.AddWithValue( "@Wert2", "Wert 2" );
        ...
     
        command.Dispose();
     
        connection.Close();
        connection.Dispose();


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport



    Dienstag, 10. Juli 2018 16:17
    Moderator
  • Hi,
    die Fehlerausschrift kommt üblicherweise, wenn ein Spaltenname in der SQL Anweisung falsch geschrieben wurde, ggf. Buchstabendreher oder der Spaltenname fehlt in der <Datenbank. Das solltest Du mal prüfen.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 10. Juli 2018 20:13

Alle Antworten

  • Hi,

    Datum ist ein reserviertes Wort, ich nehme mal an, dass das Problem daher kommt.

    Pack den Spaltennamen mal in [...], dann sollte es gehen. Falls nicht, prüf nochmal alle Spaltennamen. "Credtio" sieht für mich falsch aus, da deine Variable "credito" heißt und es daher einen Unterschied gibt.

    Zudem solltest Du auch aus Gründen der Sicherheit (dein Code verursacht ein ziemliches SQL Injection Problem) ausschließlich mit Parametern (in deinem Fall OleDbParameter) arbeiten.

    Wichtig bei den OleDbCommand Parametern ist die Reihenfolge das Hinzufügens. Die muss mit der Reihenfolge der Parameter im SQL Statement (Ausnahmen gibt es bspw. bei Subselects) übereinstimmen.

    Du kannst auch anstelle von ? mit "benannten" Parametern, also bpw @Name, @ID, ... arbeiten. Die Namen sind bei OleDbCommand aber Schall und Rauch, das einzig wichtige ist die Reihenfolge wie oben geschrieben. Für eine bessere Übersicht verwende ich aber in der Regel auch Namen.

    String sqlStatement = "UPDATE <Tabelle> SET <Spalte1> = @Wert1, <Spalte2> = @Wert2 WHERE <Spalte3> = @Wert3";
    OleDbConnection connection = new OleDbConnection( connectionString );
        connection.Open();
     
    OleDbCommand command = new OleDbCommand( sqlStatement, connection );
        command.Parameters.AddWithValue( "@Wert1", "Wert 1" );
        command.Parameters.AddWithValue( "@Wert2", "Wert 2" );
        ...
     
        command.Dispose();
     
        connection.Close();
        connection.Dispose();


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport



    Dienstag, 10. Juli 2018 16:17
    Moderator
  • Hi,
    die Fehlerausschrift kommt üblicherweise, wenn ein Spaltenname in der SQL Anweisung falsch geschrieben wurde, ggf. Buchstabendreher oder der Spaltenname fehlt in der <Datenbank. Das solltest Du mal prüfen.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 10. Juli 2018 20:13
  • Hallo 

    danke das hat mir sehr geholfen. Es war ein Rechtschreibfehler in Credito. Danke vielmals

    Gruss 

    Gerhard

    Mittwoch, 11. Juli 2018 15:27
  • Hallo Gerhard,

    prima, dass es nun funktioniert.

    Könntest Du den Thread abschließen, indem Du das Posting (oder auch mehrere), das die Antwort auf deine Frage beinhaltet, mit der Funktion "Als Antwort markieren" entsprechend kennzeichnest und weitere hilfreiche Postings über "Abstimmen" markierst?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Mittwoch, 11. Juli 2018 20:13
    Moderator