Laden...

Mysql Parameter Datum String

Erstellt von Maffi1986 vor 11 Jahren Letzter Beitrag vor 11 Jahren 5.513 Views
Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren
Mysql Parameter Datum String

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

C
2.121 Beiträge seit 2010
vor 11 Jahren

MySqlDbType.String

Du brauchst hier ein DateTime und keinen String.
Da passt dann der Value vom Picker ohne irgendwelche Umwandlungen rein.

T
2.219 Beiträge seit 2008
vor 11 Jahren

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.

16.806 Beiträge seit 2008
vor 11 Jahren

Das ist bei ODBC so. Bei MySQL funktioniert das mit den Namen.

F
10.010 Beiträge seit 2004
vor 11 Jahren

Er meinte nicht den gesamten Parameter, sondern die Maske.
Und die ist bei MySql bis V5 eben ? also "...AND Datum = ?date"

3.825 Beiträge seit 2006
vor 11 Jahren

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

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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

F
10.010 Beiträge seit 2004
vor 11 Jahren

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.

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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?

N
112 Beiträge seit 2010
vor 11 Jahren

das dürfte deine frage beantworten:
Lösung

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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)

N
112 Beiträge seit 2010
vor 11 Jahren

Datetimepicker.Value ist string

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

Ok, gut zu wissen, nur wie bekomme ich jetzt mein Datum aus dem Picker in meinen command für MySQL?

C
2.121 Beiträge seit 2010
vor 11 Jahren

weis es doch einfach zu:
parameter.Value = datepicker.Value;

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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.

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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.

F
10.010 Beiträge seit 2004
vor 11 Jahren

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.

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren
	
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

C
2.121 Beiträge seit 2010
vor 11 Jahren

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.

T
415 Beiträge seit 2007
vor 11 Jahren

Und vielleicht solltest du noch den Tipp weiter oben berücksichtigen und deine Parameter mit ? kennzeichnen statt mit @

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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();
  			
T
111 Beiträge seit 2005
vor 11 Jahren

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

C
2.121 Beiträge seit 2010
vor 11 Jahren

Interessanter wäre wie du den Parameter inzwischen erzeugst und den Wert zuweist.

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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

Maffi1986 Themenstarter:in
53 Beiträge seit 2012
vor 11 Jahren

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;
  		


C
2.121 Beiträge seit 2010
vor 11 Jahren

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.