Avatar billede montymus Nybegynder
27. oktober 2005 - 13:47 Der er 33 kommentarer og
1 løsning

skrive dato i en tekstboks og få den ned i en db

Jeg har lavet således at man kan skrive noget i nogle tekstbokse incl noget dato, men jeg kan ikke finde ud af at få datoen med ned i databasen.. Nogen der kan hjælpe?

private void bnCreateEvent_Click(object sender, System.EventArgs e)
        {
            //Opretter forbindelse til databasen
            string ConnectStr = "server=MONTYMUZ;uid=sa;pwd=03051996;database=5SEMTEST_DB";
            SqlConnection dbConn = new SqlConnection(ConnectStr);
            //Indsamler oplysningerne der er skrevet i tekstboksene
            int  result;
            string  sql, headLine, body, date;
            headLine = tbHeadline.Text;
            body = tbBody.Text;
            date = TextBox1.Text;
           
            //Indsætter oplysningerne i "Authors" tabellen i databasen
            sql = string.Format("INSERT INTO Event(HeadLine, Story, Date) Values('{0}','{1}','{2}');",  headLine, body, date);
            SqlCommand  SqlCmd;
            SqlCmd = new SqlCommand();
            SqlCmd.CommandText = sql;
            dbConn.Open();
            SqlCmd.Connection = dbConn;
            result = SqlCmd.ExecuteNonQuery();
            dbConn.Close();
Avatar billede iblarsen Praktikant
27. oktober 2005 - 13:49 #1
prøv med: date = Convert.ToDatetime(TextBox1.Text)
og sørg for at TextBox1.Text indeholder en valid dato
Avatar billede montymus Nybegynder
27. oktober 2005 - 13:57 #2
Jeg får fejl på dit forsøg..

System.Convert does not contain a definition for ToDateTime
Avatar billede iblarsen Praktikant
27. oktober 2005 - 14:00 #3
Det lyder spændende - jeg har ingen problemer?!?!
Avatar billede montymus Nybegynder
27. oktober 2005 - 14:01 #4
hmm.
Avatar billede montymus Nybegynder
27. oktober 2005 - 14:03 #5
Der skulle T istedet for t i ToDatetime..  nu får jeg denne error istedet:

Cannot implicity convert type System.DateTime to string
Avatar billede arne_v Ekspert
27. oktober 2005 - 15:47 #6
i hvilken linie ?
Avatar billede montymus Nybegynder
27. oktober 2005 - 16:56 #7
private void bnCreateEvent_Click(object sender, System.EventArgs e)
        {
            //Opretter forbindelse til databasen
            string ConnectStr = "server=MONTYMUZ;uid=sa;pwd=03051996;database=5SEMTEST_DB";
            SqlConnection dbConn = new SqlConnection(ConnectStr);
            //Indsamler oplysningerne der er skrevet i tekstboksene
            int  result;
            string  sql, headLine, body, date;
            headLine = tbHeadline.Text;
            body = tbBody.Text;
            date = Convert.ToDateTime(TextBox1.Text);           
            //Indsætter oplysningerne i "Authors" tabellen i databasen
            sql = string.Format("INSERT INTO Event(HeadLine, Story, Date) Values('{0}','{1}','{2}');",  headLine, body, date);
            SqlCommand  SqlCmd;
            SqlCmd = new SqlCommand();
            SqlCmd.CommandText = sql;
            dbConn.Open();
            SqlCmd.Connection = dbConn;
            result = SqlCmd.ExecuteNonQuery();
            dbConn.Close();
        }

Sådan ser koden ud nu.. Den siger så min tidligere post :)
Avatar billede arne_v Ekspert
27. oktober 2005 - 16:59 #8
date er string så

date = Convert.ToDateTime(TextBox1.Text); 

må skulle være

date = TextBox1.Text; 

som oprindeligt

hvilken fejl får du så ?
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:13 #9
JEg har ændret den tilbage til det oprindelige som du sagde Arne.. Så får jeg denne fejl:

Serverfejl i programmet '/5sem/SKiste'.
--------------------------------------------------------------------------------

Syntax error converting datetime from character string.
Beskrivelse: Der opstod en ikke-afviklet undtagelse under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.Data.SqlClient.SqlException: Syntax error converting datetime from character string.

Kildefejl:


Linje 71:             dbConn.Open();
Linje 72:             SqlCmd.Connection = dbConn;
Linje 73:             result = SqlCmd.ExecuteNonQuery();
Linje 74:             dbConn.Close();
Linje 75:         }


Kildefil: c:\inetpub\wwwroot\5sem\skiste\createevent.aspx.cs    Linje: 73

Staksporing:


[SqlException: Syntax error converting datetime from character string.]
  System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
  SKiste.CreateEvent.bnCreateEvent_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\5sem\skiste\createevent.aspx.cs:73
  System.Web.UI.WebControls.Button.OnClick(EventArgs e)
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
  System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  System.Web.UI.Page.ProcessRequestMain()




--------------------------------------------------------------------------------
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:16 #10
hvad dato format angiver du i ?

yyyy-mm-dd ?
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:19 #11
dd-mm-yyy
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:20 #12
ville gerne have tidspunkt med også men indtil videre må det bare være dato måned og år
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:21 #13
prøv lige med yyyy-mm-dd og mm-dd-yyyy
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:24 #14
to sek
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:25 #15
den giver denne fejl:

Error converting data type varchar to numeric.
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:26 #16
sry my bad... den virker med yyy-mm-dd
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:27 #17
Er der nogen måde hvorved jeg kan få tidspunkt med ???
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:27 #18
Prøv

yyyy-mm-dd hh:mm:ss
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:33 #19
den siger :
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The statement has been terminated.
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:41 #20
yyyy-mm-dd hh:mm

eventuelt med hh <= 12
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:45 #21
Det er det jeg siger Arne.. Du er gud :)  tak for hjælpen igen igen... smid lige svar for point ;)
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:46 #22
gerne
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:47 #23
men hvis du skal have en bare nogenlunde brugervenlighed på det system så synes
jeg at du skal skifte til parameters !
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:49 #24
Jamen Arne så må du jo lige give et crashcourse til mig i det...:-)  Jeg har set dig anbefale det i andre indlæg, men jeg synes ikke jeg kan finde noget ordenligt om det på nettet ( jeg er ikke go til at søge)..
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:51 #25
Er det noget hen ad Stored Procedures ????
Avatar billede arne_v Ekspert
27. oktober 2005 - 21:55 #26
det er ikke stored procedures

omend det ligner lidt

jeg prøver lige at bixe et eksempel
Avatar billede montymus Nybegynder
27. oktober 2005 - 21:56 #27
lyder nice. tak
Avatar billede arne_v Ekspert
27. oktober 2005 - 22:02 #28
mit klassiske eksempel:

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 i = (int)rdr[0];
            DateTime d = (DateTime)rdr[1];
            Console.WriteLine(i + " " + d);
        }
        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 i = (int)rdr2[0];
            DateTime d = (DateTime)rdr2[1];
            Console.WriteLine(i + " " + d);
        }
        rdr2.Close();
        SqlCommand drp = new SqlCommand("DROP TABLE dtest", con);
        drp.ExecuteNonQuery();
        con.Close();
    }
}
Avatar billede montymus Nybegynder
27. oktober 2005 - 22:10 #29
Ser godt ud :-)  men må nok erkende at jeg har tabt tråden godt og grundigt..
Avatar billede montymus Nybegynder
27. oktober 2005 - 22:13 #30
using System;
using System.Threading;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
//Laver en connection til databasen
        SqlConnection con = new SqlConnection("server=ARNEPC3;Integrated Security=SSPI;database=Test");
        con.Open();
//Opretter en table dtest
        SqlCommand cre = new SqlCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con);
        cre.ExecuteNonQuery();
//opretter en commando til at indsætte data I tabel
        SqlCommand ins = new SqlCommand("INSERT INTO dtest VALUES (@i, @d)", con);
//Det er så her jeg taber tråden &#61514;
        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();
//Vent 1 sek inden den fortsætter>
            Thread.Sleep(1000);
        }
//Udskriver alle rækker fra tabellen I konsollen
        Console.WriteLine("All rows :");
        SqlCommand sel = new SqlCommand("SELECT * FROM dtest", con);
//Taber tråden igen
        SqlDataReader rdr = sel.ExecuteReader();
        while(rdr.Read())
        {
            int i = (int)rdr[0];
            DateTime d = (DateTime)rdr[1];
            Console.WriteLine(i + " " + d);
        }
        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 i = (int)rdr2[0];
            DateTime d = (DateTime)rdr2[1];
            Console.WriteLine(i + " " + d);
        }
        rdr2.Close();
        SqlCommand drp = new SqlCommand("DROP TABLE dtest", con);
        drp.ExecuteNonQuery();
        con.Close();
    }
}


Ved ikke om det er rigtig, men det jeg har lavet som kommentar er ca det jeg forstår af det du har skrevet :(
Avatar billede arne_v Ekspert
27. oktober 2005 - 22:14 #31
Hele ideen er at du kan:
  - angive @d i din SQL sætning
  - angive at @d er en DateTime
  - selv parse tb.Text til en DateTime (*)
  - indsætte den DateTime som værdi for @d

*: DateTime dt = DateTime.Parse(tb.Text);
Avatar billede arne_v Ekspert
27. oktober 2005 - 22:15 #32
// fortæller at @i er en int og @d en datetime
        ins.Parameters.Add("@i", SqlDbType.Int);
        ins.Parameters.Add("@d", SqlDbType.DateTime);
        for(int i = 0; i < 10; i++)
        {
// sætter værdi af @i og @d
            ins.Parameters["@i"].Value = i;
            ins.Parameters["@d"].Value = DateTime.Now;
// udfører query
            ins.ExecuteNonQuery();
//Vent 1 sek inden den fortsætter>
            Thread.Sleep(1000);
        }
Avatar billede arne_v Ekspert
27. oktober 2005 - 22:16 #33
DateTime.Parse er *langt* mere fleksibel end SQLServer til at gætte dato formater
Avatar billede montymus Nybegynder
27. oktober 2005 - 22:20 #34
ok.. jeg prøver lige at sidde og lege med det... der kommer nok et sp. eller 2 i en ny tråd hehe
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

IT-JOB