[C#] Problem mit DateTimePicker-Value und DateTime-Format in Access

warcraft9105

Erfahrenes Mitglied
Moin moin,
hab wieder einmal ein Problem:D.
Und zwar habe ich in meiner Access-Datenbank eine Tabelle in der eine Spalte vom Typ DateTime ist. Wenn ich jetzt einen Datensatz speichern möchte geht es mit
Code:
 "INSERT INTO Daten(Datum) VALUES('" + DateTime.Today.ToString() + "');";
wunderbar, aber mit
Code:
 "INSERT INTO Daten(Datum) VALUES('" + this.dateTimePicker1.Value.ToString() + "');";
nicht, obwohl es der gleiche String wäre. (einfach mit MessageBox.Show() ausprobiert)
Kann mir jemand sagen was ich falsch mache?

MfG, Max
 
Wie schiebst du denn die Daten in die Datenbank? Wieso arbeitest du nicht mit Parametern?

Ich habe mal gelernt:

Benutze für variable Inhalte eines SQL-Befehls niemals String-Verknüpfung, sondern immer DbParameter!


Macht zwar ein wenig mehr arbeit, erhöht aber die Sicherheit...

Wenn ich davon ausgehe, dass du mit einem DbCommand-Objekt arbeitest, dann ist das relativ einfach:

Code:
using(DbCommand myDbCmd = getDbCommand()) // Erstellen des DbCommands implementieren
{

myDbCmd.CommandText = "INSERT INTO myTab (dateTimeField) VALUES (@dateParam)";

DbParameter dbP = new DbParameter("dateParam", DbType.DateTime); //Oder so ähnlich

myDbCmd.Parameters.Add(dbP);
myDbCmd.ExecuteNonQuery();
}

...und schon bist du dein Problem los!
 
Habs gerade ausprobiert... Funktioniert aber auch nicht... Er bringt immer noch eine Fehlermeldung:
Code:
Unverträglicher Datentyp in Ausdruck
Verwende übrigends den Namspace System.Data.OleDb...

MfG, Max
 
Na klar...
Code:
cmd = ConnectCommand();
cmd.CommandText = "DELETE FROM Daten WHERE ArbeiterID = " + aID + " AND Datum=@dateparam;";
cmd.Paramters.Add("dateparam", this.dtp_datum.value);
 
Also zuerst einmal: Wenn Parameter, dann alles Parameter ;-) :

Code:
cmd = ConnectCommand();
cmd.CommandText = "DELETE FROM Daten WHERE ArbeiterID=@aID AND Datum=@dateparam;";

cmd.Paramters.Add("dateparam", this.dtp_datum.value);
cmd.Paramters.Add("aID", aID);

...vielleicht lag es ja an der ArbeiterID - ist das ein varchar oder ein int in der DB?
 
Nö an der aID liegts nicht... Bin mir da so sicher weil die Query vorher gegangen is... Aber eben nicht mit diesem DateTime-Object...
Code:
cmd = ConnectCommand();
cmd.CommandText = "DELETE FROM Daten WHERE ArbeiterID = " + aID + " AND Datum=Date();";
das Feld ArbeiterID is ein VARCHAR(20) Feld...
 
...und das Feld Datum ist ein DateTime nehm ich mal an...

Ist das hier ein DateTime-Objekt oder ein String:

Code:
this.dtp_datum.value

Sorry, is noch früh und ich hatte noch keinen Kaffee - das Problem ist bestimmt offensichtlich aber ich sehs noch nicht ;-)


Hab gerade den Thread noch gefunden:

http://www.eggheadcafe.com/conversation.aspx?messageid=33182691&threadid=33182681

vielleicht bringt dich das weiter - gleiches Problem wie bei dir!
 
Zuletzt bearbeitet:
Der Thread hat mir jetzt nicht geholfen... leider...
Die Variable dtp_datum.Value ist der Wert von meinem DateTimePicker dtp_datum... Der Value sieht so aus: 10.06.2009 00:00:00...
Und in der Datenbank hab ich das gleiche Format... Deswegen versteh ich nicht wieso er mir diese Fehlermeldung bringt...
 
Ich habs mal "nachgebaut" und in den Anhang gepackt. Scheint zu laufen - schaus dir mal an. Benutze zwar kein OleDB, ist aber vom Prinzip her das gleiche...
 
Zuletzt bearbeitet:
Zurück