Avatar billede karsten_larsen Praktikant
30. august 2007 - 02:15 Der er 8 kommentarer og
1 løsning

Dato problem ved SQL sætning

Problem: prøver at trække dato ud fra Database_1 og indsætte denne i Database_2

Udtrækning af dato fra Database_1, som er i smalldatetime i databasen.

Dim TimeStart as Date
TimeStart = Reader("TimeStart")


Denne dato skal sættes ind i Database_2

"Update Database_2 Set TimeStart = '" &  TimeStart & "'"


Så kommer følgende fejl:

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value


??:-) karsten_larsen
Avatar billede arne_v Ekspert
30. august 2007 - 02:19 #1
Prøv og formater TimeStart uden sekunder !

SMALLDATETIME går nemlig kun ned til minutter.
Avatar billede karsten_larsen Praktikant
30. august 2007 - 02:45 #2
øhh, er helt med mht. formater.

Har lavet denne funktion, som løser problemet, men hvis der er noget som er mere smart er jeg meget nysgerig.

    Function DateTransform(ByVal Time As String)
        Dim Year As String = ""
        Dim Month As String = ""
        Dim Day As String = ""
        Dim hour As String = ""
        Dim minute As String = ""
        Dim second As String = ""

        Year = Time.Substring(6, 4)
        Month = Time.Substring(3, 2)
        Day = Time.Substring(0, 2)
        hour = Time.Substring(11, 2)
        minute = Time.Substring(14, 2)
        second = Time.Substring(17, 2)

        Dim bReturn As String = ""
        bReturn = Year & "-" & Month & "-" & Day & " " & hour & ":" & minute & ":" & second
        Return bReturn
    End Function

:-) karsten_larsen
Avatar billede nielle Nybegynder
30. august 2007 - 07:05 #3
Jeg vil da helt klart anbefale at du kigger på parametre i stedet for at gøre det med streng mainpulation på SQL-stregen.

http://www.eksperten.dk/artikler/831
Avatar billede karsten_larsen Praktikant
30. august 2007 - 10:31 #4
nielle -> jeg bruger normalt parametere og sp, i dette tilfælde skulle der bare flyttes data fra en db til en anden i et objekt uden direkte bruger adgang dertil, tænkte det gik men det gjorde det ikke :(

:-) karsten_larsen
Avatar billede neoman Novice
30. august 2007 - 10:36 #5
Fejlen kommer fordi "Update Database_2 Set TimeStart = '" &  TimeStart & "'" konverterer TimeStart til en string i hht din lokale kultur, altså formentligt dd/MM/yyyy HH:mm:ss. Hvis du så tager datoen som i dag, så er det 30/8/2007 (+ noget tid)  Internt kan SQL (og også Access) bedst lide formatet MM/dd/yyyy + noget tid, så med den danske culture tror den den får den ottende dag i den 30 måned, og det kan den ikke lide. Hvis man bruger et eksplicit og ENTYDIGT string format som du efterfølgende har gjort har gjort, eller f.eks. dd/MMM/yyyy HH:mm:ss , som  også er entydigt, så fungerer det. Men, som Nielle siger, hvis man bruger parametre så slipper man for den slags bøvl.
Avatar billede neoman Novice
30. august 2007 - 11:43 #6
Strictly speaking, så er det jo i '" &  TimeStart & "' hvori der ligger en implicit typecasting, så den kunne skrives som '" &  TimeStart.ToString("MM/dd/yyyy HH:mm:ss") & "' - men ikke en anbefalelsesværdig procedure:)
Avatar billede nielle Nybegynder
30. august 2007 - 11:58 #7
Jeg mener stadig at det smarteste er at bruge parameter her ... specielt siden at du jo er vandt til at bruge dem andre steder.
Avatar billede karsten_larsen Praktikant
30. august 2007 - 12:19 #8
ja ja, hermed gjort

        Dim Connection = New System.Data.SqlClient.SqlConnection
        Connection.ConnectionString = ConfigurationManager.ConnectionStrings("XXXX").ConnectionString

        Dim Command = New System.Data.SqlClient.SqlCommand
        Command.CommandText = "[DataTransferTimeStart]"
        Command.CommandType = System.Data.CommandType.StoredProcedure
        Command.Connection = Connection

        Dim parameterItemId1 As SqlParameter ' TimeStart
        parameterItemId1 = Command.CreateParameter()
        parameterItemId1.ParameterName = "@TimeStart "
        parameterItemId1.Direction = ParameterDirection.Input
        parameterItemId1.SqlDbType = SqlDbType.SmallDateTime
        parameterItemId1.Value = TimeStart.toString
        Command.Parameters.Add(parameterItemId1)

        Connection.Open()
        Command.ExecuteNonQuery()
        Connection.Close()

:-) karsten_larsen

Vil I lave et svar, hvis I vil have point?
Avatar billede nielle Nybegynder
30. august 2007 - 18:23 #9
Svar ;^)
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