Avatar billede tj_cuper Nybegynder
21. juni 2007 - 18:33 Der er 17 kommentarer og
1 løsning

Sql dato fejl.

Får denne her fejl hver gang til prøvet at tilføje en nyhed med en dato til min sql server 2000.

The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.
The statement has been terminated.

Mit script:

    Dim objNewsPro As New NewsPro
        objNewsPro.Titel = txtTitle.Text
        objNewsPro.Text = txtTekst.Text
        objNewsPro.Dato = DateTime.Today
     
        Dim objNewsFac As New NewsFac
        objNewsFac.AddNews(objNewsPro)

På forhånd tak :)
Avatar billede neoman Novice
21. juni 2007 - 19:19 #1
"...char data type to smalldatetime data type..." - dvs at du har et eller andet sted en string og ej en dato - kig på hvad der sker der (og luk dine gamle spørgsmål i øvrigt - det gør man ved at vælge den/de personer som skal ga points i listen til venstre)
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 20:35 #2
Okay kan bare ikke rigtig se fejlen for i min property lag har jeg lavet. dato as date.

Men se lige min sql :)

strSQL &= "Values ('" & pro.Titel & "', '" & pro.Text & "', '" & pro.Add & "', '" & pro.Dato & "')"

er den ikke osse rigtig nok?
Avatar billede neoman Novice
21. juni 2007 - 21:14 #3
næh, fordi du kun skal angive strings med '' - hvad med

strSQL &= "Values ('" & pro.Titel & "', '" & pro.Text & "', '" & pro.Add & "', " & pro.Dato & ")" ?

Desuden, det er en fordel at bruge parametre, så slipper man for at bakse med den slags, og er beskyttet mod SQl injection.

strSQL = "Values ( @title ,@text, @Dato)"

og
command.Parameters.Add(new OleDbParameter("@title", pro.Titel));
command.Parameters.Add(new OleDbParameter("@text", pro.text));
command.Parameters.Add(new OleDbParameter("@dato", pro.dato));

hvis du bruger access, f.eks.
Avatar billede neoman Novice
21. juni 2007 - 21:15 #4
oops - og her har du nemlig en konvertering fra string til dato ...
...& pro.Dato &  ... som egentligt burde være pro.Dato.toString

og den slags slipper man for når man bruger parametre
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 21:21 #5
Det virker stadig ikke med to.string :(
Forstår det simpelt hen ikke.
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 21:35 #6
btw. Jeg anvender en MSSQL 2000 server. Har du andre forslag til hvad fejlen kan skyldes?
Avatar billede neoman Novice
21. juni 2007 - 21:45 #7
Ja det gik op for mig lige nu, siden du har en smalldatetime 8som jo ikke findes i access)

Tjah - datetime/smalldatetime er ret sære/følsomme ( i forhold til access) .. jeg ville seriøst foreslå at du bypasser konverteringsproblemet ved at bruge parametre, f.eks.
mycommand.Parameters.Add(New SqlParameter("@dato", SqlDbType.SmallDateTime)).Value = pro.dato
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 21:49 #8
Hvor skal det sættes ind henne, kan du ikke lige skrive det :)?

Lidt forviret...
Avatar billede neoman Novice
21. juni 2007 - 21:52 #9
Lige som her

strSQL = "Values ( @title ,@text, @Dato)"

og
command.Parameters.Add(new OleDbParameter("@title", pro.Titel));
command.Parameters.Add(new OleDbParameter("@text", pro.text)); osv

bare sql -tingene i stedet for oledb

og under forudsætning af at din sqlcommand instance hedder command - ellers må du lige tilpasse det
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 21:54 #10
Sådan her ser den ud:


    Public Sub AddNews(ByVal pro As NewsPro)

        Dim strSQL As String

        strSQL = "Insert into tblNews(fldTitel, fldText, fldAdd, fldDato)"
        strSQL &= "Values ('" & pro.Titel & "', '" & pro.Text & "', '" & pro.Add & "', '" & pro.Dato & "')"
        Dim objData As New DataAccess
        objData.ModifyDataSql("(local)", "username", "password", strSQL, "database")

    End Sub
Avatar billede neoman Novice
21. juni 2007 - 21:54 #11
mycommand.Parameters.Add(New SqlParameter("@title", SqlDbType.VarChar)).Value = pro.Titel

mycommand.Parameters.Add(New SqlParameter("@text", SqlDbType.VarChar)).Value = pro.text

mycommand.Parameters.Add(New SqlParameter("@dato", SqlDbType.SmallDateTime)).Value = pro.dato
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 21:58 #12
hvad så med den der mycommand er det strSQL?
Avatar billede tj_cuper Nybegynder
21. juni 2007 - 22:15 #13
Nu får jeg fejlen: Must declare the variable '@Titel'.

Script:

Public Sub AddNews(ByVal pro As NewsPro)

        Dim strSQL As String

        Dim mycommand As New SqlClient.SqlCommand
        mycommand.Parameters.Add(New SqlClient.SqlParameter("@Titel", SqlDbType.VarChar)).Value = pro.Titel
        mycommand.Parameters.Add(New SqlClient.SqlParameter("@Text", SqlDbType.VarChar)).Value = pro.Text
        mycommand.Parameters.Add(New SqlClient.SqlParameter("@Add", SqlDbType.VarChar)).Value = pro.Add
        mycommand.Parameters.Add(New SqlClient.SqlParameter("@dato", SqlDbType.SmallDateTime)).Value = pro.Dato

        strSQL = "Insert into tblNews(fldTitel, fldText, fldAdd, fldDato)"
        strSQL &= "Values (@Titel ,@Text, @Add, @Dato)"
        'strSQL &= "Values ('" & pro.Titel & "', '" & pro.Text & "', '" & pro.Add & "', '" & pro.Dato & "')"

        Dim objData As New DataAccess
        objData.ModifyDataSql("(local)", "Jens", "abcdefg", strSQL, "3boxCMS")

    End Sub
Avatar billede neoman Novice
21. juni 2007 - 23:49 #14
Ja det går galt, fordi du sender kun SQL-sætningen afsted, tilsyneladende, og der hvor den bliver anvendt kender systemet intet til parametrene. Jeg ved ikke hvordan du har lavet din kode, men f.eks.

        objData.ModifyDataSql("(local)", "Jens", "abcdefg", strSQL, "3boxCMS")
kunne i stedet for anvende

        objData.ModifyDataSql("(local)", "Jens", "abcdefg", myCommand, "3boxCMS")


Et eksempel for et SQL kald med parametre: 
      Dim ID As Integer = 12
      Dim Name As String = "O'Neil"
      Dim TranDate As Date = Now.Date
      Dim cm As New SqlCommand("", YourConnection)

      cm.CommandText = "DELETE FROM YourTable WHERE ID=@ID and Name=@Name and TranDate=@TranDate"

        cm.Parameters.Add("@ID", SqlDbType.Int).Value = ID
        cm.Parameters.Add("@Name", SqlDbType.VarChar).Value = Name
        cm.Parameters.Add("@TranDate", SqlDbType.DateTime).Value = TranDate

        cm.ExecuteNonQuery()
Avatar billede tj_cuper Nybegynder
22. juni 2007 - 09:17 #15
Kan jeg ikke bare bruge strSQL i stedet for mycommand?
Avatar billede tj_cuper Nybegynder
22. juni 2007 - 22:32 #16
fik det til at virke var bare noget med sporg i mssql serveren. så skulle gerne virke nu. Ellers tak for hjælpen så smid lige set svar.
Avatar billede neoman Novice
23. juni 2007 - 15:44 #17
Det var godt du fik det til at køre.
Avatar billede tj_cuper Nybegynder
23. juni 2007 - 16:28 #18
Jeps og tak for hjælpen :)
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