01. april 2007 - 15:57Der er
24 kommentarer og 2 løsninger
DateTime og US-format
Hej eksperter.
Jeg har et problem med DateTime i min webapplikation som benytter en simpel Access-database. I metoden herunder vil jeg gerne have indsat en ny tråd, og en post herunder, på et diskussionsboard. Metoden indsætter en ny tråd, finder derefter tråden via DateTime og opretter en post under tråden.
Det fungerer men datoen der indsættes i databasen har et US-format og ikke et DK-format. Dette forstår jeg ikke, jeg har debugget og kan se at formatet på currentDate er DK?
Fjerner jeg ## er det et DK-format der indsættes, men så fejler denne: SELECT threadId FROM Thread WHERE threadDate = '" + currentDate + "'" med typmatch blabla..exeption
Hvad kan jeg gøre for at få nedenstående til at gemme dato'er i DK-format??
jeg tror som sagt måske det kan løses ved brug af Parameters.AddWithValue som jeg har gjort, men det kan du selvfølgelig ikke når du har lavet din egen facade klasse:)
du kunne jo prøve at køre det direkte bare for at teste
Jeg har lige haft tilsvarende bøvl med datoer i Access - da jeg skal have noget op at køre for at teste, så har jeg fundet en bypass som lader til at virke. Hvis du har tekststrenge som indeholder datoværdier, så kureres problemet ved at operere med formatet dd/MMM/yyyy HH:mm Læg mærke til 3xM, som får den til at skrive måneden ud i bogstaver.
Således : datofelt.text = minDato.tostring("dd/MMM/yyyy HH:mm"). Når man så anvender ....# " & datofelt.text & " # .... i SQL sætningerne, så funker det og datoerne i DB'en bliver i DK-format.
kalp >> ikke uenig der. Jeg bruger skam også parameters lige på nær dér hvor jeg bakser med datoer. Det er såmænd mere alt det her Culture-stuff som jeg løb sur i, end parameters, så det øjeblik resten af logikken funker så SKAL jeg betvinge datoerne også :-)
neoman>>> Vil det sige at du slet ikke bruger DateTime variabler men kun strings?
Arne>>> Vil du uddybe det du mener, forstå det ikke helt.
Er det korrekt et bruge # # i stedet for ' ' i SQL'en? Bruger jeg ' ' så indsættes datoen i DK-format.
Gør jeg det er problemet jo så bare at SELECT threadId FROM Thread WHERE threadDate = '" + currentDate + "'" fejler med datatype mismatch blabla... Er der en "work around" hertil?
fanatic - jo, men når jeg skriver DateTime til Access så bruger jeg strings. Dette begyndte jeg på efter at have brugt en hel aften på fejlfinding i min SQL og fandt en artikel på nettet (har ikke gemt den, sorry) som påpegede, at OleDBCommand som jeg tilgår Access med havde problemer med DateTime i en parameter, hvis parameteren var en del af en WHERE clause.
Arne>> Tak, men jeg kan dog ikke se hvorfor det skulle være mere korrekt end den måd e jeg gør det på. Jeg har lagt alt databaselogik i en dll som kaldes fra GUI-delen. I sådan et tilfælde bruger man vel ikke parameters?
neoman>> Du mener altså at jeg kan gøre sådan her i min metode:
jo netop - du smider DbWrapper som hos dig hedder DataControl i din dll og kalder den med SQL sætning og et variabel antal argument som vist i mit eksempel
Nu bruger jeg en TableAdapter på et typed DataSet, og for mig ser det ud til at være ret ækvivalent til den ovenstående DbWrapper, men hvor jeg har fået koden serveret af VS. Er der nogen ulemper jeg har overset ? (Og undskyld for at sidetracke tråden lidt) :-)
ulemperne må være: 1) det er ikke så nemt at skifte ADO.NET provide (måske skulle DbWrapper hedde OleDbWrapper !) 2) der er lidt runtime overhead ved at added de parameters dynamisk
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.