Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Falscher Datumseintrag in Access Datenbank
burns1111 - Di 14.03.17 23:23
Titel: Falscher Datumseintrag in Access Datenbank
Hallo,
ich versuche mich an meinem ersten C# Programm und einem Access Datenbankzugriff. Leider kommt nicht das in der Datenbank an was ich erwarte.
Vielleicht kann sich jeman mal den Code anschauen und mir einen Tipp geben.
Vielen Dank schon mal.
Hier mein Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| while (Tage <= ts.Days) { DateTime Urlaubstag = DateTime.Now; Urlaubstag = Urlaubstag.AddDays(Tage);
if (cbVertreter.Visible == false) cmd.CommandText = "Insert into Anwesenheit (Mitarbeiter, Beginn, Grund) values ( ?, ?, ?)"; else cmd.CommandText = "Insert into Anwesenheit (Mitarbeiter, Beginn, Grund, Urlaubsvertreter) values ( ?, ?, ?, ?)"; cmd.Parameters.Add(new OleDbParameter("", ID_NR));
cmd.Parameters.Add(new OleDbParameter("", Urlaubstag.ToString())); cmd.Parameters.Add(new OleDbParameter("", cbGrund.SelectedItem.ToString())); if (cbVertreter.Visible == true) { cmd.Parameters.Add(new OleDbParameter("", cbVertreter.SelectedItem.ToString())); }
cmd.ExecuteNonQuery(); Tage++; } |
Was möchte ich machen. Ich will eine Schleife laufen lassen die mir Urlaubstage in eine Datenbank einträgt. Zum Test habe ich mir die Variable "DateTime Urlaubstag" angelegt mit aktuellem Datum. Die Variable Tage wird in jedem Schleifendurchlauf inkrementiert. Das scheint soweit zu passen, weil wenn ich diese in ein label lege wird es richtig angezeigt. Leider ist in der Datenbank immer das gleiche datum eingetragen und nicht das fortlaufende.
Woran kann das liegen?
Moderiert von Narses: C#-Tags hinzugefügt
Moderiert von Th69: Beitragsformatierung überarbeitet.
Moderiert von Th69: Titel (leicht) geändert.
Ralf Jansen - Mi 15.03.17 00:00
Für mich sieht es gerade so auch als würdest du immer weiter Parameter hinzufügen ohne die alten zu entfernen damit bleiben die ersten Parameter die du tatsächlich benutzt gleich egal wieviele du noch zusätzlich anhängst.
Entweder die Parameter Collection zwischendurch clearen, die 4 Parameter wiederverwenden und den Wert der Parameter ändern und nicht neue anhängen oder aber was ich persönlich machen würde erst gar nicht soweit kommen lassen und einfach immer ein neues DBCommand Object verwenden. Da hängen keine großen Kosten dran.
burns1111 - Mi 15.03.17 20:36
Hallo,
schon mal Danke für die Antwort und hier noch ein paar Informationen zu meinem Plan wie das Programm funktionieren soll.
Der Parameter für Mitarbeiter und Grund bleibt immer gleich, es soll in der Datenbank sich nur das Datum ändern.Ich brauche in der Datenbank Fur jeden Tag einen Eintrag welcher Mitarbeiter und aus welchem Grund er nicht da ist.
Wäre es möglich mir ein ansatz vom Programmcode zukommen zu lassen, weil ich es so nicht verstehe.
Ich wiederhole doch die Schleife je nach Anzahl der Tage. Das Datum wird meines erachtens auch in der Variable "Urlaubstag" bei jedem Schleifendurchlauf verändert und über den Befehl "cmd.Parameters.Add(new OleDbParameter("", Urlaubstag.ToString()));" mit wechselnden Wert dann Eingetragen.
Ralf Jansen - Mi 15.03.17 20:54
Zitat: |
Wäre es möglich mir ein ansatz vom Programmcode zukommen zu lassen, weil ich es so nicht verstehe. |
Ich versuche es besser zu erklären. Dann bist du an der Reihe. Nur selbst machen macht schlau ;)
C#-Quelltext
1:
| cmd.Parameters.Add(new OleDbParameter("", Urlaubstag.ToString())); |
Dieser Befehl erzeugt einen neuen Parameter in der cmd.Parameters Collection. In deinem Code legst du pro Schleifendurchlauf also 3(4) Parameter an und im nächsten Schleifendurchlauf hängst du dann wieder neue Parameter an. Gehen wir mal von dem Fall aus das du Urlaubsvertreter nicht eintragen willst also 3 Parameter benutzt. Dann legst du im ersten Schleifendurchlauf 3 Parameter an die auch im Sql benutz werden. Im nächsten Schleifendurchlauf legst du dann 3 weitere Parameter an ohne die vorherigen 3 zu entfernen du hast dann zusammen 6 Parameter. Im SQL benutzt du weiterhin 3 Parameter und zwar die ersten 3. Die hast du nicht verändert und die 3 dahinter mit den neuen Daten werden ignoriert da sie im SQL nicht angesprochen werden. Du bekommst also immer die gleichen Daten da immer die gleichen Parameter verwendet werden.
Bonushinweise zu den 3 angeboten Lösungsmöglichkeiten.
burns1111 - Fr 17.03.17 20:34
Vielen Dank für die zusätzliche Info ich werde es probieren.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!