Avatar billede bernhof Nybegynder
20. februar 2008 - 10:14 Der er 12 kommentarer og
1 løsning

DateTime SqlParamter og SqlDataAdapter

Hejsa,

Jeg sidder med en mindre udfordring i .NET 1.1. Jeg benytter "Current Language=Dansk" i min connection string, hvilket ser ud til at skabe nogle problemer med min SqlDataAdapter og min SqlParameter af typen DateTime.

I nedenstående kodeeksempel kalder jeg en stored procedure med en datetime parameter. Og der får jeg fejlen "The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value."

Så snart jeg fjerner "Current Language=Dansk" fra min connection string, er der ingen problemer. Det har ikke hjulpet at ændre CultureInfo på tråden, og jeg synes ikke umiddelbart at kunne finde nogen mulighed for selv at bestemme, hvordan datoen skal formatteres i kaldet til SQL serveren.

Jeg prøver at finde ud af, om der er tale om en reel bug i .NET 1.1, eller om der er en 'legitim' måde at håndtere denne situation på. Af samme årsag er jeg ikke interesseret i at få forslag til workarounds; dem er der masser af :-)


Dim conn As New SqlConnection("....; Current Language=Dansk")
Dim cmd As New SqlCommand("", conn)
Dim adap As New SqlDataAdapter(cmd)
Dim tab As New DataTable

cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "TestSP"
cmd.Parameters.Add("@Dato", DateTime.Today)

adap.SelectCommand = cmd
adap.Fill(tab) 'Fejl sker her.


På forhånd tak.
Avatar billede sherlock Nybegynder
20. februar 2008 - 10:20 #1
Det kan være at du, explicit, skal erklære din "@Dato"-parameter til at være en DateTime-type.
Avatar billede bernhof Nybegynder
20. februar 2008 - 10:21 #2
Det har jeg også prøvet, men uden held.
Avatar billede nielle Nybegynder
20. februar 2008 - 10:36 #3
Er det sådan du har gjort?

cmd.Parameters.Add("@Dato", SqlDataType.DateTime).Value = DateTime.Today;
Avatar billede bernhof Nybegynder
20. februar 2008 - 10:38 #4
Yes, lige præcis.
Avatar billede nielle Nybegynder
20. februar 2008 - 10:51 #5
Har du prøvet at skrive Danish i stedet for Dansk?
Avatar billede bernhof Nybegynder
20. februar 2008 - 10:52 #6
Min SQL profiler viser mig, at adap.Fill(tab) foretager følgende kald:

exec TestSP @Dato = 'jan  1 2008 12:00AM'
Avatar billede bernhof Nybegynder
20. februar 2008 - 10:53 #7
"Danish" resulterer i præcis samme fejl som med "Dansk".
Avatar billede bernhof Nybegynder
20. februar 2008 - 10:56 #8
Og det skal selvfølgelig lige tilføjes, at jeg i ovenstående tilfælde havde overført datoen d. 1. jan 2008 til SP'en, og ikke DateTime.Today :)
Avatar billede winners79 Nybegynder
20. februar 2008 - 15:43 #9
Ved ikke lige om det betyde rnoget, men vi bruger jo ikke AM i dag, hvilke regional settings er dit windows sat op med?
Avatar billede bernhof Nybegynder
20. februar 2008 - 16:22 #10
Mit windows kører med danske regional settings, hvilket man skulle tro medførte et dansk dato-format i kaldet, men det gør det ikke. Under alle omstændigheder burde det jo være muligt at omgå eventuelle regional settings i .NET ved at ændre trådens CultureInfo, men det har jeg som nævnt heller ikke haft held med.
Avatar billede nielle Nybegynder
20. februar 2008 - 17:10 #11
Er der nogen problemer ved at køre det uden Current Language?
Avatar billede bernhof Nybegynder
20. februar 2008 - 17:25 #12
Ja, der er visse problemer. Bl.a. sortering af danske bogstaver.
Avatar billede bernhof Nybegynder
15. juli 2009 - 11:46 #13
Lukker
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

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