Avatar billede Lars Søndergaard Nybegynder
14. september 2005 - 20:13 Der er 10 kommentarer og
1 løsning

DataTime kan ikke gemme i SQL

Jeg får denne her fejl:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

UPDATE [TBL_User] SET [exp_date] = '17-06-2006 00:00:00' WHERE [user_id] = 2614

Hvad skal jeg gøre for at kunne gemme det i MSSQL?
Den kommer ind som en alm DateTime
Avatar billede arne_v Ekspert
14. september 2005 - 20:15 #1
hurtigt: få vendt formatet så det passer til det databasen forventer

bedst (ihvertfald hvis du har lidt erfaring): brug parameters
Avatar billede arne_v Ekspert
14. september 2005 - 20:16 #2
17-06-2006 virker ikke så prøver man

2006-06-17
06-17-2006

etc.
Avatar billede Lars Søndergaard Nybegynder
14. september 2005 - 20:27 #3
ja det ved jeg godt men hvad betyder det at bruge params ?
Avatar billede arne_v Ekspert
14. september 2005 - 20:28 #4
at du beder ADO.NET selv ordne det med dato formater !

:-)

jeg kommer lige med et eksempel
Avatar billede arne_v Ekspert
14. september 2005 - 20:38 #5
using System;
using System.Threading;
using System.Data;
using System.Data.SqlClient;

class MainClass
{

    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC3;Integrated Security=SSPI;database=Test");
        con.Open();
        SqlCommand cre = new SqlCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con);
        cre.ExecuteNonQuery();
        SqlCommand ins = new SqlCommand("INSERT INTO dtest VALUES (@i, @d)", con);
        ins.Parameters.Add("@i", SqlDbType.Int);
        ins.Parameters.Add("@d", SqlDbType.DateTime);
        for (int i = 0; i < 10; i++) {
            ins.Parameters["@i"].Value = i;
            ins.Parameters["@d"].Value = DateTime.Now;
            ins.ExecuteNonQuery();
            Thread.Sleep(1000);
        }
        Console.WriteLine("All rows :");
        SqlCommand sel = new SqlCommand("SELECT * FROM dtest", con);
        SqlDataReader rdr = sel.ExecuteReader();
        while (rdr.Read()) {
            int iv = (int)rdr[0];
            DateTime dv = (DateTime)rdr[1];
            Console.WriteLine(iv + " " + dv);
        }
        rdr.Close();
        Console.WriteLine("Rows last 5 seconds since " + DateTime.Now + " :");
        SqlCommand sel2 = new SqlCommand("SELECT * FROM dtest WHERE d > @d", con);
        sel2.Parameters.Add("@d", SqlDbType.DateTime);
        sel2.Parameters["@d"].Value = DateTime.Now.AddSeconds(-5);
        SqlDataReader rdr2 = sel2.ExecuteReader();
        while (rdr2.Read()) {
            int iv = (int)rdr2[0];
            DateTime dv = (DateTime)rdr2[1];
            Console.WriteLine(iv + " " + dv);
        }
        rdr2.Close();
        SqlCommand drp = new SqlCommand("DROP TABLE dtest", con);
        drp.ExecuteNonQuery();
        con.Close();
    }
}
Avatar billede arne_v Ekspert
14. september 2005 - 20:38 #6
pointen er at vi intet sted angiver dato/tid i tekst format
Avatar billede Lars Søndergaard Nybegynder
14. september 2005 - 20:44 #7
jeg kigger på det i morgen.. nu er der fodbold på 3+ det er trods alt vigtigere end arbejde :D
Avatar billede Lars Søndergaard Nybegynder
14. september 2005 - 23:09 #8
yes sir.. det virker perfekt.. bare kom med et svar..
Avatar billede arne_v Ekspert
15. september 2005 - 08:38 #9
svar
Avatar billede skwat Praktikant
16. september 2005 - 10:32 #10
arne_v, jeg har tit tænkt på at lave en artikel omkring dette, men har aldrig haft tid, måske det var noget for dig?
Avatar billede arne_v Ekspert
16. september 2005 - 11:04 #11
tja - måske !
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