Avatar billede el_fredo Praktikant
17. juni 2003 - 09:21 Der er 11 kommentarer og
1 løsning

C#, SQL, DateTime problemer

Jeg laver en ASP.NET side og bruger C# som kodesprog. Derudover forbinder jeg til en Access database. Siden kan ses på http://www.shomen.dk . Mit problem er:

Jeg laver et system der tilpasser en SQL-sætning alt efter brugerens valg i nogle drop-down bokse. En af boksene hedder "Periode" og giver mulighed for, at vælge hvor lang tid tilbage søgningen skal køre. Man kan vælge "Day", "Week", "Month", "Year" og "Full period". Problemer opstår når man vælger "Week". SQL sætningen ser som sådan fin ud, og jeg har ikke skrevet forkert i koden. Jeg benytter et switch statement, der ser sådan ud:

case "Week":dateTime = dateTime.Subtract(TimeSpan.FromDays(7));    sql+=("DTG > #"+dateTime.ToString()+"#");break;

Det samme gør jeg med "Day" "Month" osv. og det virker helt fint. Jeg ved dog ikke om det er tilfældigt at dette virker, men at det bare er med ugen at jeg ser problemet. Det har ikke noget at gøre med foranstillede nuller, da både SQL-sætningen og Databasen skriver fx "09-06-2003" og ikke "9-6-2003". Søgningen på "Week" giver simpelthen bare ikke noget resultat. Hvad kan der være galt?
Avatar billede elv Nybegynder
17. juni 2003 - 09:28 #1
Lyder mystisk hvis de andre virker...
Prøv eventuelt at poste hele dit case-statement. Og prøv også at lave en trace på den sql-sætning, der kommer ud af det når du laver en søgning med week og sammenligne denne med den, som bliver lavet når du søger på noget andet....
Avatar billede nielslbeck Nybegynder
17. juni 2003 - 09:32 #2
Synes før jeg har haft den slags problemer... tror måske databasen opfatter datoen som 6. september 2003, i stedet for 9. juni 2003... Prøv evt at sætte datoen op som 2003-06-09 (eller er det 2003-09-06 - nej, mener det ikke)...
Avatar billede el_fredo Praktikant
17. juni 2003 - 09:38 #3
Jamen kan det være tilfældet, når måned og dag virker fint? Kører jeg en subtract på DateTime.Now på 1 dag, viser den (hvis DateTime.Now = 17-06-2003) 16-06-2003... nå, men jeg prøver lige...

elv --> Herunder følger hele mit case statement. Sammenligner jeg week og day sql'erne, så ser de begge korrekte ud...

switch (period)
            {
                case "Full"    :                                                        sql+=("DTG < #"+dateTime.ToString()+"#");break;
                case "Day"    :dateTime = dateTime.Subtract(TimeSpan.FromDays(1));    sql+=("DTG > #"+dateTime.ToString()+"#");break;
                case "Week"    :dateTime = dateTime.Subtract(TimeSpan.FromDays(7));    sql+=("DTG > #"+dateTime.ToString()+"#");break;
                case "Month":dateTime = dateTime.Subtract(TimeSpan.FromDays(30));    sql+=("DTG > #"+dateTime.ToString()+"#");break;
                case "Year"    :dateTime = dateTime.Subtract(TimeSpan.FromDays(365));    sql+=("DTG > #"+dateTime.ToString()+"#");break;
            }
Avatar billede nielslbeck Nybegynder
17. juni 2003 - 09:41 #4
Det må være dataTime.ToString("yyyy-dd-MM") du skal bruge... hvis det er som jeg tror :-)
Avatar billede el_fredo Praktikant
17. juni 2003 - 09:41 #5
Jeg har lige prøvet at sætte datoen i windows til 04-06-2003, og nu virker week... så fejlen må ligge andetsteds. Måske har du ret i det med at access bytter om på dem, hvis det er muligt. Det virkede måske fint med 17-06-2003, da de ikke kan byttes om, men 10-06-2003 kan jo godt byttes om...
Avatar billede el_fredo Praktikant
17. juni 2003 - 09:42 #6
Ok. Kan man det?
Avatar billede nielslbeck Nybegynder
17. juni 2003 - 09:43 #7
Nemlig... det er det der er så forvirrende ved det... I stedet for at melde fejl, bytter den bare om - og så ser det til tider ud til det virker... Så prøv lige med den .ToString jeg skrev...
Avatar billede el_fredo Praktikant
17. juni 2003 - 09:45 #8
Så finder den ikke noget, og jeg får en null-reference på min datareader... hvordan skal man helt præcist anføre formatet i sin ToString()??? Jeg har prøvet med: "yyyy-dd-MM", "DD-MM-YYYY" og "MM-DD-YYYY". Ingen af dem giver resultat...
Avatar billede nielslbeck Nybegynder
17. juni 2003 - 09:47 #9
Det må være:

case "Week":dateTime = dateTime.Subtract(TimeSpan.FromDays(7));    sql+=("DTG > #"+dateTime.ToString("yyyy-MM-dd")+"#");break;

Da den giver datoen som 2003-06-17
Avatar billede el_fredo Praktikant
17. juni 2003 - 09:53 #10
Det var da utroligt. Så nemt kan det være. Tak for det.
Avatar billede nielslbeck Nybegynder
17. juni 2003 - 09:55 #11
Helt okay - dårlig lavet i Access :-(
Avatar billede el_fredo Praktikant
17. juni 2003 - 09:56 #12
Ja, det er det.
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