webForumDet fria alternativet

Datum från kalender/SQL-server?

3 svar · 256 visningar · startad av fredrik

fredrikMedlem sedan dec. 19991 072 inlägg
#1

På en sida använder jag olika "CurrentCulture" och "CurrentUICulture", beroende på en användares val.

Därefter hämtar jag ett värde ifrån en kalender. Värdet på datumet blir vid "2004-01-08" (och "it-IT" som culture):
#1/8/2004#

På ett annat stället använder jag en SQLDataReader och hämtar där ett datumfält ifrån databasen med ".GetDateTime()".
Värdet för datumet "2004-01-05" blir då:
#5/1/2004#

Alltså sätts de tvärtom! De olika uthämtningarna görs i olika "sidor", den första hämtas i en aspx-sida och den andra hämtas i min BL-klass.

I ASPX-sidans topp anger jag alltså:
Threading.Thread.CurrentThread.CurrentCulture
Threading.Thread.CurrentThread.CurrentUICulture

Men detta verkar inte hänga med hela vägen, eller så formateras datumet helt enkelt annorlunda.

Jag har försökt att trixa till det med bla:

Dim NewDate as DateTime = cType(CALENDER.SelectedDate.Tostring("d", New CultureInfo("sv-SE")), DateTime)

Men det hjälper inte...Det blir samma formatering ändå...

...några tips?

fredrikMedlem sedan dec. 19991 072 inlägg
#2

Hittade nu det egentliga felet...

Datumen som visades var i själva verket ett annat datum, "2004-05-01" istället för "2004-01-05". Problemet ligger i att jag inte kan få SQL-servern att förstå att det är den 5 Januari jag vill ha, och inte den 1 Maj.

Jag skickar i nuläget datumet som en parameter till en SP, och hur jag än försöker så blir det felformaterat.

GladhMedlem sedan maj 20012 812 inlägg
#3

Har du testat med att skapa ditt datum med:

DateTime myDateTime = new DateTime(2004,5,1);

Detta borde fungera oberoend av vilken Culture du använder.

- M

fredrikMedlem sedan dec. 19991 072 inlägg
#4

Japp, det har jag provat. Problemet ligger som sagt inte i .NET. För oavsett om den formaterar datumet som
#1/5/2004# eller #5/1/2004# så "vet" den att det är 5e januari 2004.

Problemet låg som sagt när jag skulle skicka datumet som en parameter till SQL-servern. SQL-servern tolkar datumet som:
"dag/månad/år".

En temporär lösning jag gjort nu är att jag vid tilldelning av parametrarna gör:

DAL.AddParameter("@Param", Mydate.ToString("d", new CultureInfo("sv-SE"))

Och då funkar allt som det ska. Detta påvisar ju även att .NET även "vet" vilket datum det gäller.

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)