23. september 2004 - 18:42Der er
39 kommentarer og 1 løsning
Loop i asp.net (c#)
(kalender) Jeg skal lave en løkke der køre igennem alle 24 timer, hvor den ved hver time skal hente alle de data'er i db'en som starter i den time...
jeg har denne executer: OleDbDataReader MyDataReader = MyCommand.ExecuteReader();
navn på colonne med start tid: starttime
havde tænkt noget i stilen med: for (int i=0; i <24; i++) { --Hvis starttime.hour == i så læg ind i tabel-- label += MyDataReader["subject"] + "<br>"; } tabel.Text = label;
på select har jeg en where der tjekker at det kune er dem der passer til dagen i dag så den ikke henter hele db'en... men hvordan kan den kode sørge for at det kommer i den rigtige rækkefølge...?
havde tænkte på at den skulle tage alle dem der passer til klokken 1 og sætte dem ind i samme <td></td>.. og så gå videre til klokken 2 og sætte dem ind i <td></td> så du får en liste lige som Outlook kalenderen...
jeg får: CS1002: ; var forventet ----> (i linje 2)
ved denne kode:
for (int i=0; i < 24; i++) { String SQLString2 = "SELECT subject, eventdate, allday, starttime, id FROM calendar where eventdate = #" + DateTime.Now.Date + "# and DATEPART("h", timestart)=" + i + ""; }
string TestLabel = ""; for (int i=0; i < 24; i++) { String SQLString2 = "SELECT subject, eventdate, allday, starttime, id FROM calendar where eventdate = #" + DateTime.Now.Date + "# and DATEPART(\"h\", timestart)=" + i; OleDbCommand MyCommand2 = new OleDbCommand(SQLString2, MyConnection); OleDbDataReader MyDataReader2 = MyCommand2.ExecuteReader(); TestLabel += MyDataReader2 + "<br>"; MyDataReader2.Close(); } testlabel.Text = TestLabel;
men får denne fejl: System.Data.OleDb.OleDbException: Der er ikke angivet nogen værdi for en eller flere krævede parametre.
Det der er meningen her er at den kun skal vise de ting der er på kalenderen i dag... derfor skal den ikke vise de andre... det laver jeg script til senere...
damn det er sq en del sværere end jeg troede :) hvad skal jeg skrive ved kolonnenr? jeg har prøvet at skrive 1 da den første kolonne er "subject"... er det det eller har jeg misforstået det?
fejl: System.InvalidOperationException: Der findes ingen data for rækken eller kolonnen.
Findes der ikke en kode som i asp --if not (rs.eof or rs.bof) then-- ? Koden nu: for (int i=0; i < 24; i++) { String SQLString2 = "SELECT id, subject, eventdate, allday, starttime FROM calendar where eventdate = #" + DateTime.Now.Date + "# and DATEPART(\"h\", starttime)=" + i; OleDbCommand MyCommand2 = new OleDbCommand(SQLString2, MyConnection); OleDbDataReader MyDataReader2 = MyCommand2.ExecuteReader(); if(MyDataReader2.IsDBNull(0)) {
den første kolonne er et id med autonummer...
Tænkte lige jeg ville ligge staksporing til: [InvalidOperationException: Der findes ingen data for rækken eller kolonnen.] System.Data.OleDb.OleDbDataReader.DoValueCheck(Int32 ordinal) +46 System.Data.OleDb.OleDbDataReader.IsDBNull(Int32 ordinal) +16 ASP.default_aspx.ShowDayData() +265 ASP.default_aspx.Page_Load(Object sender, EventArgs e) +5 System.Web.UI.Control.OnLoad(EventArgs e) +67 System.Web.UI.Control.LoadRecursive() +35 System.Web.UI.Page.ProcessRequestMain() +750
jo nu viser den det :D det var fordi jeg ikke havde sat text="et eller andet" i label... troede ikke man skulle det først... så leger jeg lige lidt med det og vender tilbage hvis der er mere :D
lige et sidste spørgsmål... :) Nu er det jo sådan at man godt kan have flere events inden for samme time... Kan det lade sig gøre at lave en løkke inden i den løkke vi har nu? I vores SQLString har vi jo hentet alle dem der er i den time...
ex: if(MyDataReader2.Read() && !MyDataReader2.IsDBNull(0)) { --kør løkken igennem og skriv alle ud-- TestLabel += MyDataReader2["subject"] + "<br>"; --slut løkke-- }else{ TestLabel += "intet<br>"; }
Det er meget normalt at kalde Read i en while løkke og så processe hver række inden i den løkke.
Synes godt om
Ny brugerNybegynder
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.