[C#] bzw. [Access]: Insert fügt immer die gleichen Werte ein

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

    [C#] bzw. [Access]: Insert fügt immer die gleichen Werte ein

    Hi Leute,

    ich habe folgendes Problem:

    In eine Tabelle (t_trainingsplan) meiner Access-Datenbank wird ein Datensatz eingefügt:

    Quellcode

    1. public void TrainingsplanEinfuegen(int WochentagNr, int SportartNr, int Saetze, int Wiederholungen, double Dauer)
    2. {
    3. this.cmd.CommandText = @"INSERT INTO t_trainingsplan (WochentagNr, SportartNr, Saetze, Wiederholungen, Dauer)" +
    4. @"VALUES (@WochentagNr, @SportartNr, @Saetze, @Wiederholungen, @Dauer);";
    5. this.cmd.Parameters.Add("@WochentagNr", OleDbType.Integer).Value = WochentagNr;
    6. this.cmd.Parameters.Add("@SportartNr", OleDbType.Integer).Value = SportartNr;
    7. this.cmd.Parameters.Add("@Saetze", OleDbType.Integer).Value = Saetze;
    8. this.cmd.Parameters.Add("@Wiederholungen", OleDbType.Integer).Value = Wiederholungen;
    9. this.cmd.Parameters.Add("@Dauer", OleDbType.Double).Value = Dauer;
    10. this.cmd.ExecuteNonQuery();
    11. }


    Das funktioniert nach dem Programmstart beim ersten Insert problemlos. Jedoch wird danach bei jedem weiteren Insert (der Nutzer kann sich einen Trainingsplan zusammenstellen, indem er bestimmte Sportarten den Wochentagen zuordnen kann...) immer der gleiche erste Datensatz wieder eingefügt. Und das, obwohl die Parameter beim Debuggen die vom Nutzer ausgewählten korrekten Werte besitzen.

    Kennt jemand das Problem bzw. kann mir wer helfen? Der Fehler muss ja dann eigentlich an der Datenbank bzw. an der Tabelle selbst liegen, wenn die eigentlich korrekten Werte in der Funktion selbst ankommen.
    @ Renati: Danke, daran liegts!

    Ich hab im Hauptformular ein globales Objekt "AccDb" vom Typ Datenbank. Die Datenbank-Klasse hab ich selbst geschrieben.
    Die Funktion TrainingsplanEinfuegen() wird dann jedesmal nach Klicken eines Buttons aufgerüfen.

    Ich hab die Funktion am Ende nun erweitert um:

    Quellcode

    1. this.cmd.Parameters.Clear();


    Ist das Vorgehen so in Ordnung mit dem globalen Objekt vom Typ Datenbank? Oder sollte ich das generell anders lösen?

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

    Irgendwo wirst du deine Datenbankverbindung halten müssen. Vermutlich finden die meisten OOP-Programmierer es ästhetischer, wenn die Datenbankverbindung in einer statischen Klasse oder etwas ähnlichem gehalten wird, anstatt direkt in einer Form. Entwickle aber lieber dein eigenes Gefühl dafür, da man es auch sehr leicht übertreiben und zum Softwarearchitektur-Astronauten mutieren kann. Es ist nichts grundverkehrtes an deinem Vorgehen.

    Du kannst die Werte von SQL-Parametern auch nachträglich ändern. Das erspart dir das Löschen und immer wieder neu erstellen.