Avatar billede spottie Nybegynder
20. maj 2006 - 22:38 Der er 18 kommentarer og
1 løsning

Hvordan konvertere man på et dataobjekt?

Goddag Eksperter

Jeg har en dateTimePicker i mit program, men nårjeg vælger shortdate skrives dato ud på den måde at det står: "dd-mm-yyyy", men når man skal indsætte dato i en mysql er formatet "yyyy-mm-dd", hvordan kan man konvertere så det lægges i databasen?

Håber nogen ved det.

vh spottie
Avatar billede dj_uncas Nybegynder
20. maj 2006 - 22:40 #1
Du får den ud som en DateTime right? Så kan du bare formatere den:

string mysqlDate = selectedDateTime.ToString( "yyyy-mm-dd" );
Avatar billede arne_v Ekspert
20. maj 2006 - 22:41 #2
når man skal indsætte en dato i MySQL bruger man naturligvis parameters ...

:-)
Avatar billede dj_uncas Nybegynder
20. maj 2006 - 22:44 #3
Lurer parameters objekt typer? Jeg plejer godt nok også at bruge parametre, men har faktisk aldrig tænkt over hvor meget de gør for mig...
Avatar billede arne_v Ekspert
20. maj 2006 - 22:52 #4
med parameters så bruger du jo bare

paramsobjekt.Value = datetimeobjekt;

uden at lave nogen konvertering til string
Avatar billede dj_uncas Nybegynder
20. maj 2006 - 22:54 #5
ja, det er det jeg mener - så må der ligge et eller andet type tjek eller native konvertering af objektet. Måske nærmest det sidste...
Avatar billede dj_uncas Nybegynder
20. maj 2006 - 22:59 #6
Du kan lige få et hurtigt eksempel (anvender Connector/Net fra MySQL)

MySqlConnection conn = new MySqlConnection( connString );
MySqlCommand cmd = new MySqlCommand( conn, "INSERT INTO Users ( Name, Phone ) VALUES( @name, @phone )" );

cmd.Parameters.Add( new MySqlParameter( "@name", "dj_uncas" ) );
cmd.Parameters.Add( new MySqlParameter( "@phone", "12345678" ) );

cmd.ExecuteNonQuery();
Avatar billede arne_v Ekspert
20. maj 2006 - 23:11 #7
om driveren sendet et binært tidsformat til database serveren eller om den
formaterer til en streng i det rigtige format er ligegyldigt - det er dens problem
Avatar billede dj_uncas Nybegynder
20. maj 2006 - 23:12 #8
Ja da, jeg var bare nysgerrig ;-)
Avatar billede arne_v Ekspert
20. maj 2006 - 23:12 #9
et eksempel med DateTime:

        MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password=");
        con.Open();
        MySqlCommand cre = new MySqlCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con);
        cre.ExecuteNonQuery();
        MySqlCommand ins = new MySqlCommand("INSERT INTO dtest VALUES (@i, @d)", con);
        ins.Parameters.Add("@i", MySqlDbType.Int);
        ins.Parameters.Add("@d", MySqlDbType.Datetime);
        for(int i = 0; i < 10; i++)
        {
            ins.Parameters["@i"].Value = i;
            ins.Parameters["@d"].Value = DateTime.Now; // <-----
            Thread.Sleep(1000);
            ins.ExecuteNonQuery();
        }
        MySqlCommand sel = new MySqlCommand("SELECT * FROM dtest", con);
        MySqlDataReader rdr = sel.ExecuteReader();
        while(rdr.Read())
        {
            int i = (int)rdr[0];
            DateTime d = (DateTime)rdr[1];
            Console.WriteLine(i + " " + d);
        }
        rdr.Close();
        MySqlCommand drp = new MySqlCommand("DROP TABLE dtest", con);
        drp.ExecuteNonQuery();
        con.Close();
Avatar billede arne_v Ekspert
20. maj 2006 - 23:16 #10
en vigtig pointe er at MySQL driveren sagtens kan gøre noget andet
end SQLServer driveren

jeg gætter på at MySQL konverterer til streng

men MySQL Connector for .NET er open source så man kan kigge hvis man er meget
nysgerrig
Avatar billede arne_v Ekspert
20. maj 2006 - 23:30 #11
jeg snagede lige lidt

MySqlDateTime.cs indeholder:


            if (mySqlDbType == MySqlDbType.Timestamp && !writer.Version.isAtLeast(4,1,0))
                val = String.Format("{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}",
                    value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second );
            else
            {
                val = String.Format("{0:0000}-{1:00}-{2:00} {3:00}:{4:00}:{5:00}", value.Year, value.Month,
                    value.Day, value.Hour, value.Minute, value.Second );
            }

det ligner meget en formatering til tekst.
Avatar billede spottie Nybegynder
20. maj 2006 - 23:51 #12
Det virker ikke at formatere den, skal bruge en måde til at gøre således når man vælger en dato konvertere den om så den passer i mysql, nogen der kan hjælpe uden alt det der paratere noget?

spottie
Avatar billede dj_uncas Nybegynder
21. maj 2006 - 00:19 #13
Du skal nok ud med lidt mere om hvad det er der ikke virker...
Avatar billede spottie Nybegynder
21. maj 2006 - 00:47 #14
dj_uncas... Når jeg formatere den datetimerpicker1.value.tostring("yyyy-mm-dd");, så skriver den 2006-56-20 og 2006-32-20 og sådan noget der ikke passer, det er det der ikke virker...

håber på hjælp.

vh spottie
Avatar billede arne_v Ekspert
21. maj 2006 - 01:00 #15
yyyy-MM-dd

stort M
Avatar billede spottie Nybegynder
21. maj 2006 - 09:49 #16
arne_v... Tak, nu virker det... Nogle der sådan kan forklare hvad parametre er og hvor manbruger det henne?

spottie
Avatar billede dj_uncas Nybegynder
21. maj 2006 - 11:21 #17
Du bruger parametre når du skal have noget brugerdata med i en sql kommando, eller bruge en Stored Procedure. Parameters sørger for en masse ting for dig, bla. blokerer de for SQL injection, så de er ret gode at have i baghånden..

Parameters er knyttet til en kommando, som i ovenstående eksempel hvor MySqlCommand har en MySqlParameterCollection som propery hvor du kan tilføje parameters...

Her er lidt fra dokumentationen om det:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatasqlclientsqlparameterclasstopic.asp

(dog til SQL Server, men til MySql skal du mere eller mindre bare sætte "My" foran)
Avatar billede arne_v Ekspert
21. maj 2006 - 15:45 #18
Avatar billede spottie Nybegynder
26. maj 2006 - 01:08 #19
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
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