Avatar billede sph1nx Nybegynder
28. januar 2008 - 21:30 Der er 12 kommentarer og
1 løsning

C# mySql date datatype

har en mySql database, hvor der er en kolonne som har en DATE datatype, men hvordan kan jeg gennem C# hente noget fra denne database hvor WHERE clausen indholder to datoer.

har prøvet indtil videre og der henter den bare ingeting frem.

bruger dateTimePicker fra windows forms.

tror selv det er dato formatet der er forkert, så hvordan kan jeg få det til at passe mySql date type ser således ud ="yyyy-mm-dd";

mit select ser sådan  ud :

String mySqlQuery = "SELECT SUM(price) FROM buys where buydate > @startDate and buydate < @endDate";
                MySqlCommand command = new MySqlCommand(mySqlQuery, connection, transaction);
                command.Parameters.Add("@startDate", MySqlDbType.Date).Value = startDate;
                command.Parameters.Add("@endDate", MySqlDbType.Date).Value = endDate;
                result = (Double)command.ExecuteScalar();
Avatar billede arne_v Ekspert
28. januar 2008 - 21:37 #1
Naar du bruger parameters skal du ikke bekymre dig om dato formater.

Jeg vil formode at du skal lade startDate og endDate vaere DateTime.
Avatar billede sph1nx Nybegynder
28. januar 2008 - 21:48 #2
ja, det ville jeg også mene, bruger også DateTime, mit metode hovede til den metode ser således ud :

public Double getSumBetweenDates(DateTime startDate, DateTime endDate)

og i min form bruger jeg :

cli.getSumBetweenDates(dateTimePicker1.Value, dateTimePicker2.Value).ToString();

men stadig returnerer den 0.0 som min result double er initialiseret til i min metode!
Avatar billede arne_v Ekspert
28. januar 2008 - 21:59 #3
Ingen exception ?

Og det er med vilje at du bruger > og < fremfor >= og <= ?
Avatar billede sph1nx Nybegynder
28. januar 2008 - 22:13 #4
jo jeg får squ da exception, havde bare lavet en bøf der hvor den skulle fanges *argh*, men får en InvalidCastException!

tjah, det er fordi jeg altid prøver mine query i en query browser først, og der virker det med < og >  men prøver lige det andet.
Avatar billede arne_v Ekspert
28. januar 2008 - 22:43 #5
Proev og udskriv typen af det du faar tilbage.

Mit gaet er at du skal bruge:

result = (decimal)command.ExecuteScalar();
Avatar billede arne_v Ekspert
28. januar 2008 - 22:48 #6
object o = command.ExecuteScalar();
// udskriv o.GetType().Name

er godt til debug !!
Avatar billede sph1nx Nybegynder
28. januar 2008 - 22:53 #7
jeg får en DBNull type
Avatar billede arne_v Ekspert
28. januar 2008 - 23:00 #8
det tyder paa ingen raekker eller null vaerdier
Avatar billede sph1nx Nybegynder
28. januar 2008 - 23:16 #9
hmm mærkeligt, for hvis jeg smider den ind i query browser og erstatter datoerne med nogle jeg ved som er der (har selvfølgelig også valgt noget jeg vidste ville give resultat fra dateTimePickeren) så får jeg et resultat
Avatar billede arne_v Ekspert
29. januar 2008 - 04:44 #10
Prøv lige med ?xx fremfor @xx
Avatar billede arne_v Ekspert
29. januar 2008 - 04:48 #11
Det her virker hos mig:

        MySqlCommand sel = new MySqlCommand("SELECT * FROM tt WHERE ?start <= t1 and t1 <= ?end", con);
        sel.Parameters.Add("?start", MySqlDbType.Date);
        sel.Parameters.Add("?end", MySqlDbType.Date);
        sel.Parameters["?start"].Value = DateTime.Parse("27-01-2007");
        sel.Parameters["?end"].Value = DateTime.Parse("27-01-2007");
        MySqlDataReader rdr = sel.ExecuteReader();
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0]);
        }
        rdr.Close();
Avatar billede sph1nx Nybegynder
29. januar 2008 - 11:48 #12
OMG, det var @ der skulle ændres til ?, mærkeligt, bruger ellers @ i mine andre metoder, hvad er forskellen?

men igen er du mega hjælpsom arne_v, mange tak!

smid et svar
Avatar billede arne_v Ekspert
29. januar 2008 - 15:29 #13
Man bruger @xx i SQLServer og Access, ?xx i MySQL og :xx i Oracle.

Nogen gange virker @xx ogsaa i MySQL, hvilket jeg heller ike forstaar.

Brug ?xx saa boer det altid virke.

Og et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester