Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 08:34 Der er 9 kommentarer og
1 løsning

Spørgsmål ang. sql statement og parametere

Hej. Jeg har en metode der returnere et dataset. Når jeg gør kalder metoden således, så fungerer det fint.

            foreach (DataRow dr in getMySqlDataSet("SELECT * FROM shift where start = ?start", new MySqlParameter("?start", "2007-12-04 07:00:00"), "shift").Tables[0].Rows)
            {
                Debug.WriteLine("Output " + dr["end"]);
            }
Så returnere den række som passer på datoen.

Men ser min parameter således ud, så kommer der ikke noget. Hvordan kan det være? 2007-12-04 07:00:00 BETWEEN 2007-12-07 07:00:00

Har prøvet at ændre lidt med i den parameter, men desværre uden held
Avatar billede erikjacobsen Ekspert
07. december 2007 - 08:54 #1
Så skal du have en sql i retning af

"SELECT * FROM shift where start between  ?start and ?slut"

Man kan kun sætte værdier ind med parameters, ikke ændre sql-sætningens grundlægende syntaks.
Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 09:01 #2
Okay så er det der den går galt, jeg troede egentlig bare at de parametere virkede som en slags variabel. Mange tak for det hurtigere og præcise svar.
Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 09:01 #3
Smid lige et svar :)
Avatar billede erikjacobsen Ekspert
07. december 2007 - 09:08 #4
Jeg samler slet ikke på point, tak. Svar selv, accepter dit eget svar.
Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 09:43 #5
Okay, det var da flinkt gjort... Ved du hvordan man laver et array med MySqlParameters? Synes ikke jeg kan finde den rigtige syntaks?
Avatar billede erikjacobsen Ekspert
07. december 2007 - 10:00 #6
array?
Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 10:05 #7
Er det ikke et array jeg skal bruge, da det skal indeholde flere værdier? Eller skal jeg have 2 MySqlParameters argumenter i min getMySqlDataSet metode? Jeg skal jo både have en ?start og en ?end dato
Avatar billede erikjacobsen Ekspert
07. december 2007 - 10:14 #8
Du skal bare have 2 parametre.
Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 10:44 #9
Kan stadig ikke få det til at virke. Nu har jeg lavet det om til 2 datetime argumenter. Men får denne exception

#42000You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '2007-12-10 00:00:00' AND '2007-12-16 00:00:00'' at line 1

Således ser min getMySqlDataSet ud

        private static DataSet getMySqlDataSet(string sql, DateTime first, DateTime second, string table)
        {
            DataSet ds = new DataSet();
            using (MySqlConnection con = new MySqlConnection("server=localhost;uid=root;pwd=xxx;database=p1;"))
            {
                MySqlDataAdapter da = new MySqlDataAdapter();
                MySqlCommand cmd = new MySqlCommand(sql, con);
                cmd.Parameters.Add("?start", first);
                cmd.Parameters.Add("?end", second);
                da.SelectCommand = cmd;
                da.Fill(ds, table);
                return ds;
            }
        }

Og her kalder jeg så metoden

            foreach (DataRow dr in getMySqlDataSet("SELECT * FROM shift where start BETWEEN = ?start AND ?end", start_date,end_date, "shift").Tables[0].Rows)
            {
                Debug.WriteLine("Output " + dr["end"]);
            }
Avatar billede alex_sleiborg Nybegynder
07. december 2007 - 10:46 #10
Har fundet fejlen. Har bare lige glemt at fjerne det = i min sql statement. DOH..!
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

Unik System Design A/S

DevOps Engineer

Forsikrings- og pensionsakademiet A/S

IT-teknisk profil

IT-Forsyningen I/S

It-specialist til serverteam