Avatar billede Max Novice
09. februar 2006 - 12:07 Der er 12 kommentarer og
1 løsning

DateTime, SQL og formattering

Hold da op, der er mage spm. mht. DateTime og SQL i denne kategori, men her er lige ét til! ;)

Jeg er ved at lave en flad tabel indeholdende en masse datoer. Disse bliver så smidt over i en SQL database. Alt virker fint, men når en dato har klokkeslettet 0:0:0 bliver tidspunktet truncated i databasen. Det er højst sandsynligt ligegyldigt, og man kan sagtens lave undtagelsesprogrammering i resten af sin kode, men hvis man nu er lidt pernittengryn, og VIL have tidspunktet på datoen i sin database også, hvad gør man så?

Datolisten ser således ud:

12-12-2001 23:59:59
13-12-2001
13-12-2001 00:00:01
...

Håber I kan hjælpe.

Mvh.
Avatar billede mikkel_sommer Nybegynder
09. februar 2006 - 12:32 #1
Du kan lave en metode som formaterer din DateTime instans, noget a la:

public static string convertDateToSQLDate(DateTime dateValue)
{
    string returnValue = string.Empty;

    if(!dateValue.Equals(null))
    {
        returnValue = string.Format(string.Format("'{0:yyyy-MM-dd}'", dateValue));
    }
    else
    {
        returnValue = "''";
    }
    return returnValue;
}
Avatar billede mikkel_sommer Nybegynder
09. februar 2006 - 12:33 #2
Sorry du ville jo gerne have tiden med, skulle have været den her:

public static string convertDateToSQLDateTime(DateTime dateValue)
{
    string returnValue = string.Empty;

    if(!dateValue.Equals(null))
    {
        string str = string.Format("{0:yyyy-MM-dd HH:mm:ss.ms}", dateValue);
        returnValue = str.Substring(0, str.Length - 1);
        //returnValue = string.Format(string.Format("'{0:yyyy-MM-dd HH:mm:ss}'", dateValue));
    }
    else
    {
        returnValue = "''";
    }
    return returnValue;
}
Avatar billede Max Novice
09. februar 2006 - 12:39 #3
Hmm. Ja, men er den ikke ligeglad med strengformatet, når den smider det over i SQL databasen? Det er dér tiden er vist "forkert". Det er et DateTime felt i min database og en DateTime variabel i min kode.
Avatar billede mikkel_sommer Nybegynder
09. februar 2006 - 12:46 #4
Det format denne metode returnerer er det format sql date forventer, prøv det en gang det virker 100% for mig
Avatar billede Max Novice
09. februar 2006 - 13:32 #5
Hah! Jeg er så ikke den hurtigste knallert på havnen! :D
Selvfølgelig har du ret, og problemet ligger ikke i koden, det er visningen af datoen, som bare er forkert. En SQL DateTime er jo ikke "12-12-2001 00:00:00" men bare et tal, så det hele er der aligevel.
Avatar billede dr_chaos Nybegynder
09. februar 2006 - 13:39 #6
Du kan vel klare det hele på database niveau ?
Avatar billede dr_chaos Nybegynder
09. februar 2006 - 13:39 #7
Det vil være langt hurtigere end at gøre det runtime i c#
Avatar billede arne_v Ekspert
09. februar 2006 - 13:53 #8
naeppe

jeg er ret sikker paa at det er hurtigst at sende binaer tid over nettet og
formatere i C# end af formatere i databasen
Avatar billede Max Novice
10. februar 2006 - 08:22 #9
Ok, inden jeg lukker.. Mikkel Sommer, hvad er grunden til du bruger substring på din returnvalue? Kunne du ikke bare have lavet returnValue = str; ?
Avatar billede mikkel_sommer Nybegynder
10. februar 2006 - 08:27 #10
Ja det glemte jeg at skrive, det har du nok ikke brug for, det var bare fordi i hvisse tilfælde skulle jeg ikke have hele tiden med
Avatar billede dr_chaos Nybegynder
10. februar 2006 - 08:29 #11
bare en kommentar du kan lave den om til
public static string convertDateToSQLDateTime(DateTime dateValue)
{
    string returnValue = string.Empty;

    if(!dateValue.Equals(null))
    {
        string returnValue = string.Format("{0:yyyy-MM-dd HH:mm:ss.ms}", dateValue);
    }
return returnValue;

}
Avatar billede mikkel_sommer Nybegynder
10. februar 2006 - 15:43 #12
hvis du gør det dr_chaos og dateValue kommer som null sendes en tom streng til databasen med mindre man tilføjer de to ' hvor sql sætninger laves. Grunden til at jeg har gjort det sådan er at så behøver jeg ikke tænke mere på formateringen af returnValue strengen inden den sendes til databasen.

memnoch: hvis du ikke har brug for at forkorte strengen kan du sagtens lægge det hele ind i returnValue med det samme:

string returnValue = string.Format("{0:yyyy-MM-dd HH:mm:ss.ms}", dateValue);
Avatar billede Max Novice
14. februar 2006 - 14:34 #13
Ok. Ikke 100% det jeg var ude efter, men her er noget jeg kan bruge alligevel, så points til Mikkel Sommer. Tak for hjælpen begge to. :)
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