Hallo liebe Community,
ich bin noch recht neu in dem gebiet, und habe troz suche kein ähnliches problem gefunden, vllt. habe ich auch falsch gesucht 😃 hier mein Problem
Ich habe das Datum aus einem DateTimePicker in diesem Format 12.11.2012 dieses brauche ich auch in dem format in meiner MySQL abfrage. In einem Integer kann ich leider keine . machen. Wie bekomme ich den String bzw. das Datum aus dem Picker in meinem Command?
string Date = dateTimePicker1.Value.ToString();
mycommand.CommandText = "SELECT `gewicht`FROM `statistik`WHERE metallart = 'Aluminium' AND Datum = @date";
mycommand.Parameters.Add(new MySqlParameter("@date", MySqlDbType.String)).Value=Date;
Vielen Dank im vorraus für die Hilfe
Manuel
MySqlDbType.String
Du brauchst hier ein DateTime und keinen String.
Da passt dann der Value vom Picker ohne irgendwelche Umwandlungen rein.
War es bei MySQL nicht so, dass Parameter mit ? anstelle von @ angegeben werden?
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Das ist bei ODBC so. Bei MySQL funktioniert das mit den Namen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Er meinte nicht den gesamten Parameter, sondern die Maske.
Und die ist bei MySql bis V5 eben ? also "...AND Datum
= ?date"
Bei MySQL beginnen die Parameter mit '?', bei Oracle mit ':', bei allen anderen (die ich benutze) mit '@'.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Erstmal vielen Dank für die vielen antworten,
in was muss ich denn den dateTimePicker umwandel? wenn ich tostring mache:
Fehler CS0029: Eine implizite Konvertierung vom Typ 'System.DateTime' in 'string' ist nicht möglich.
DateTime Date = dateTimePicker1.Value.ToString();
wenn ich es ohne mache:
Fehler CS0029: Eine implizite Konvertierung vom Typ 'System.DateTime' in 'string' ist nicht möglich.
DateTime Date = dateTimePicker1.Value;
Liebe Grüße
Manuel
Du sollst den gar nicht umwandeln.
Wenn du einen echten DateTimePicker genommen hast ist Value bereits ein Datetime.
Und den sollst du eben nicht in einen String konvertieren.
wenn ich es ohne mache:
Fehler CS0029: Eine implizite Konvertierung vom Typ 'System.DateTime' in 'string' ist nicht möglich.DateTime Date = dateTimePicker1.Value;
Liebe Grüße
Manuel
So?
das dürfte deine frage beantworten:
Lösung
Aber genau das mache ich doch?
DateTime Date;
Date = dateTimePicker1.Value;
und dann bekomm ich folgende Meldung:
Fehler CS0029: Eine implizite Konvertierung vom Typ 'System.DateTime' in 'string' ist nicht möglich.
Erstellen fehlgeschlagen. (00:00:00.2901909)
Datetimepicker.Value ist string
Ok, gut zu wissen, nur wie bekomme ich jetzt mein Datum aus dem Picker in meinen command für MySQL?
weis es doch einfach zu:
parameter.Value = datepicker.Value;
bekomme ich die gleiche meldung
Fehler CS0029: Eine implizite Konvertierung vom Typ 'System.DateTime' in 'string' ist nicht möglich.
ich dachte erst das ein fehler im befehl ist, aber wenn ich nen integer einfüge klappt alles, das doofe das der integer die . nicht kann.
Liegt es vllt daran?
mycommand.Parameters.Add(new MySqlParameter("@date", MySqlDbType.String)).Value=Date;
hier steht MySqlDbType.String)).Value, hier steht string, habe dort auch schon DateTime statt string versucht, aber es kommt immer die meldung, das eine konvertierung vom Typ Syste.DateTime in string nicht möglich ist.
Das kann nicht sein.
Value ist in dem Parameter ein object, kann also alles aufnehmen.
Ausserdem aus welchem Buch hast du diesen schrecklich unnötigen code?
mycommand.Parameters.Add("@date", MySqlDbType.Datetime).Value=Date;
Muss immer funktionieren.
Einfacher wäre aber
mycommand.Parameters.AddWithValue("@date", Date);
Irgendwas anderes muß bei dir noch schief laufen.
DateTime Date = dateTimePicker1.Value;
mycommand.CommandText = "SELECT `gewicht`FROM `statistik`WHERE metallart = 'Aluminium' AND Datum = @date";
mycommand.Parameters.AddWithValue("@date", Date);
das kann ich immerhin ohne fehler Kompilieren, ich lasse mir zusätzlich Date in nem Label ausgeben, in Date steht 12.12.2012 drin. Wenn ich es ausführe passiert nichts, wenn ich
AND Datum = @date";
änder in
AND Datum = '12.12.2012'; mache, funktioniert es einwandfrei.
Wie gesagt, bin noch am anfang mit dem programieren, hab mein doch recht komplexes Programm schon fast fertig, allerdings hänge ich an dieser stelle fest, ich hab das irgendwo bei google gefunden und verwendet, es funktionierte auch einwandfrei bis ich halt das datum in meinem mysql befehl brauchte.
Liebe Grüße
Manuel
hier steht string, habe dort auch schon DateTime statt string versucht
Du solltest halt erst mal wirklich MySqlDbType.DateTime nehmen und damit weiter probieren bis es funktioniert. Ist doch klar dass ein Fehler kommt wenn du schon falsch anfängst und wieder String drin stehen hast.
Das mit "12.12.2012" als String funktioniert auch nur so lange wie deine Datenbank dieses Format auch richtig erkennt. Wenn ein anderes Datumsformat eingestellt ist knallt es, z.B. wenn die DB das Format Monat.Tag.Jahr voraussetzt. Beim 12.12. merkst du davon nichts. Beim 4.3. wird vielleicht versehentlich der 3. April eingetragen und du merkst nichts.
Und vielleicht solltest du noch den Tipp weiter oben berücksichtigen und deine Parameter mit ? kennzeichnen statt mit @
Weder mit @ noch mit ? funktioniert es, habe den fehler etwas eingekreist, der parameter nimmt den wert nich an. Siehe anhang
Ich lasse den mycommand in einem label ausgeben!
mycommand.CommandText = "SELECT `gewicht`FROM `statistik` WHERE metallart = 'Aluminium' AND Datum = @123";
mycommand.Parameters.AddWithValue("@123", Date);
lbl_Messing_text.Text=mycommand.CommandText.ToString();
Hallo
Du solltest Dir nochmal in einem Buch anschauen, wie das mit den Parametern funktioniert. Der CommandText wird dabei nie geändert. Aber was Du bis jetzt verschwiegen hast : welches Format hat den die Spalte 'Date' in der DB?
Thomas
Interessanter wäre wie du den Parameter inzwischen erzeugst und den Wert zuweist.
Das Datum ist ein Char in der DB. Das hat aber nichts mit meinem Problem zu tun, ich lasse mir mycommand in einem Label ausgeben und da steht schon das falsche drin, siehe oben.
Wenn ich statt einem String ein int nehme oder das datum direkt reinschreibe, funktioniert es einwandfrei, nur mit einem string nicht.
Bin leider noch nicht weiter, setze mich aber heute noch eine nacht dran, und fuckel ein wenig
So funktioniert es, trozdem vielen Dank für eure unterstüzung.
string Date = dateTimePicker1.Value.Date.ToString("dd.MM.yyy");
mycommand.CommandText = "SELECT `gewicht`FROM `statistik`WHERE metallart = 'Aluminium' AND Datum = @ID;";
mycommand.Parameters.Add("@ID", MySqlDbType.String);
mycommand.Parameters["@ID"].Value=Date;
Das funktioniert solange, wie die Datenbank das Format Tag.Monat.Jahr (warum eigentlich 3 y) richtig erkennt. Wenn nicht, gibts einen Fehler. Oder schlimmer, es passiert einfach nur was falsches.
Das Datum ist ein Char in der DB.
Das ist natürlich Unsinn, ein Datum gehört als DateTime in die Datenbank. So wie jetzt kannst du abfragen ob ein TEXT genauso aussieht wie er soll (Stringvergleich) aber du kannst keine Datumsbereiche eingrenzen und auch keine Berechnungen machen.
nur mit einem string nicht.
Ich muss sagen, ich verstehe ehrlich gesagt immer weniger. Mit einem string gehts jetzt auch nicht mehr oder doch?
Dringender Rat: Ändere die Spalte in der Datenbank auf ein passendes Datumsformat und bau deine Abfrage auch auf diesen Typ um. Alles andere fliegt dir früher oder später um die Ohren.