25. oktober 2007 - 14:15
Der er
28 kommentarer
case og if virker ikke i page_load . hvad skal jeg gøre? i C#
Hej. Der er en ting, jeg ikke forstår. Hvorfor virker if og case ikke i page_load'en? Hvis den ikke skal placeres der, hvor skal den så placeres, så jeg kan få variabler/arrays ind til page_load'en? Jeg har skrevet følgene: void Page_Load() { // tjekker brugerid'et, der er gemt som cookie HttpCookie cookie; cookie = Request.Cookies["id"]; string brugerid = cookie.Value; string modtager = Request.QueryString["modtager"]; switch (brugerid) { case "" + modtager + "": string privat = ";"; break; default: string privat = " AND privat = 'nej';"; break; } og jeg programmerer C#
Annonceindlæg fra Infor
25. oktober 2007 - 14:20
#1
hov. jeg glemte lige at skrive den sidste } ind, men det er ikke det, der er problemet. :p
25. oktober 2007 - 14:29
#2
switch og case fungere lige så godt der som andre steder. Men du kan aldrig ikke bruge variable, f.eks. din modtager, i en case-del.
25. oktober 2007 - 14:30
#3
Kan du ikke prøve at skitsere hvad du vil, for koden signalerer ikke dette i særlig grad. Ting jeg bemærker er dog at du laver variable (privat) som kun eksisterer i lokale scopes, hvilket ikke i dit tilfælde kan bruges til noget. Så spørgsmålet er om du har defineret dine variable et forkert sted (bare for at starte et sted)...?
25. oktober 2007 - 14:33
#4
Jeg gætter på at det er en string som skal sættes i enden på en SQL-kommando på et eller andet tidspunkt. Prøv at rette din switch til dette: string privat; if (brugerid == modtager) privat = ";"; else privat = " AND privat = 'nej';";
25. oktober 2007 - 14:34
#5
Forresten er det slet ikke nødvendigt med et ;-tegn i afslutningen af en SQL-sætning: string privat = ""; if (brugerid != modtager) privat = " AND privat = 'nej'";
25. oktober 2007 - 14:38
#6
At dømme ud fra din antagelse, nielle, så skal privat slet ikke erklæres i Page_Load, men på selve klassen, ellers vil den jo bare dø når Page_Load går ud af scope...
25. oktober 2007 - 14:39
#7
Også det. :^)
25. oktober 2007 - 19:39
#8
jeg gjorde som nielle sagde men det virker ikke :s
25. oktober 2007 - 19:41
#9
Har du flyttet definitionen af privat-variablen udenfor din Page_load() funktion?
26. oktober 2007 - 17:20
#10
Nej. jeg har flyttet allesammen nu. men det virker stadig ikke.
26. oktober 2007 - 17:21
#11
her har du hele kilden: <%@ Page Language="C#" Debug="true" %> <%@ import Namespace="System" %> <%@ import Namespace="System.Web" %> <%@ import Namespace="System.Web.Security" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.Odbc" %> <script runat="server"> string privat, brugerid, connectionString, sql, modtager; void Page_Load() { // tjekker brugerid'et, der er gemt som cookie HttpCookie cookie; cookie = Request.Cookies["id"]; brugerid = cookie.Value; modtager = Request.QueryString["modtager"]; if (brugerid == modtager) privat = ";"; else privat = " AND privat = 'nej';"; connectionString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=127.0.0.1;DATABASE=***;" + "UID=***;PASSWORD=***;" + "OPTION=3"; IDbConnection dbcon; dbcon = new OdbcConnection(connectionString); dbcon.Open(); IDbCommand dbcmd = dbcon.CreateCommand(); sql = "SELECT * FROM gaestebog where brugerid = '" + brugerid + "'" + privat + ""; dbcmd.CommandText = sql; IDataReader reader = dbcmd.ExecuteReader(); while(reader.Read()) { Response.Write("" + reader["besked"] + " - " + reader["brugerid"] + "\n"); } // saa rydder vi op reader.Close(); reader = null; dbcmd.Dispose(); dbcmd = null; dbcon.Close(); dbcon = null; } </script> <html> <head> </head> <body> <form runat="server"> <!-- Insert content here --> </form> </body> </html>
26. oktober 2007 - 17:30
#12
Prøv dette: <%@ Page Language="C#" Debug="true" %> <%@ import Namespace="System" %> <%@ import Namespace="System.Web" %> <%@ import Namespace="System.Web.Security" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.Odbc" %> <html> <head> </head> <body> <script runat="server"> void Page_Load() { // tjekker brugerid'et, der er gemt som cookie HttpCookie cookie = Request.Cookies["id"]; string brugerid = cookie.Value; string modtager = Request.QueryString["modtager"]; string privat = ""; if (brugerid != modtager) privat = " AND privat = 'nej'"; string connectionString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=127.0.0.1;DATABASE=***;" + "UID=***;PASSWORD=***;" + "OPTION=3"; IDbConnection dbcon new OdbcConnection(connectionString); dbcon.Open(); IDbCommand dbcmd = dbcon.CreateCommand(); dbcmd.CommandText = "SELECT * FROM gaestebog WHERE brugerid = '" + brugerid + "'" + privat; IDataReader reader = dbcmd.ExecuteReader(); while (reader.Read()) { Response.Write(reader["besked"].ToString() + " - " + reader["brugerid"].ToString() + "<br>"); } // saa rydder vi op reader.Close(); dbcon.Close(); } </script> <form runat="server"> <!-- Insert content here --> </form> </body> </html>
06. november 2007 - 17:30
#13
Har du fået kigget på det?
06. november 2007 - 21:29
#14
ja . jeg blev nød til at rette det her: IDbConnection dbcon new OdbcConnection(connectionString); og den kommer med denne fejl: Server error in '/' application Description: Error processing request. Error Message: HTTP 500. Stack Trace: System.NullReferenceException: Object reference not set to an instance of an object at ASP.index_aspx.Page_Load () [0x00000] at (wrapper delegate-invoke) System.MulticastDelegate:invoke_void () at System.Web.NoParamsInvoker.InvokeNoParams (System.Object o, System.EventArgs args) [0x00000] at (wrapper delegate-invoke) System.MulticastDelegate:invoke_void_object_EventArgs (object,System.EventArgs) at System.Web.UI.Control.OnLoad (System.EventArgs e) [0x00000] at System.Web.UI.Control.LoadRecursive () [0x00000] at System.Web.UI.Page.InternalProcessRequest () [0x00000] at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context) [0x00000]
06. november 2007 - 21:31
#15
Hvordan ser din kode ud? IDbConnection dbcon new OdbcConnection(connectionString); er i hvert fald ikke rigtig: IDbConnection dbcon = new OdbcConnection(connectionString);
08. november 2007 - 19:43
#16
sådan her: <%@ Page Language="C#" Debug="true" %> <%@ import Namespace="System" %> <%@ import Namespace="System.Web" %> <%@ import Namespace="System.Web.Security" %> <%@ import Namespace="System.Data" %> <%@ import Namespace="System.Data.Odbc" %> <html> <head> </head> <body> <script runat="server"> void Page_Load() { // tjekker brugerid'et, der er gemt som cookie HttpCookie cookie = Request.Cookies["id"]; string brugerid = cookie.Value; string modtager = Request.QueryString["modtager"]; string privat = ""; if (brugerid != modtager) privat = " AND privat = 'nej'"; string connectionString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=127.0.0.1;DATABASE=;" + "UID=;PASSWORD=;" + "OPTION=3"; IDbConnection dbcon; dbcon = new OdbcConnection(connectionString); dbcon.Open(); IDbCommand dbcmd = dbcon.CreateCommand(); dbcmd.CommandText = "SELECT * FROM gaestebog WHERE brugerid = '" + brugerid + "'" + privat; IDataReader reader = dbcmd.ExecuteReader(); while (reader.Read()) { Response.Write(reader["besked"].ToString() + " - " + reader["brugerid"].ToString() + "<br>"); } // saa rydder vi op reader.Close(); dbcon.Close(); } </script> <form runat="server"> <!-- Insert content here --> </form> </body> </html>
08. november 2007 - 19:51
#17
Det ser umiddelbart rigtigt nok ud. Men, hvis der ikke bliver udskrevet noget så kan det jo bl.a. skyldes at det er en forkert SQL-sætning. Prøv derfor at udskrive den: IDbCommand dbcmd = dbcon.CreateCommand(); dbcmd.CommandText = "SELECT * FROM gaestebog WHERE brugerid = '" + brugerid + "'" + privat; Response.Write("DEBUG: " + dbcmd.CommandText + "<br>");
08. november 2007 - 23:03
#18
hm når jeg sætter det ind skriver den det samme :s
09. november 2007 - 06:45
#19
Der må da blive udskrevet noeget med "DEBUG ..." ?
11. november 2007 - 15:23
#20
hvad mener du
11. november 2007 - 15:27
#21
Jeg mmener at denne linje: Response.Write("DEBUG: " + dbcmd.CommandText + "<br>"); må da uskrive noget - om ikke andet så teksten "DEBUG:".
13. november 2007 - 23:02
#22
det gør den ikke. hm er du sikker på, at fejlen ligger i forespørgelsen til mysql?
13. november 2007 - 23:10
#23
Lige nu virker det bare som om at din Page_Load() slet ikke bliver kaldt overhovedet...
14. november 2007 - 00:20
#24
nu er jeg ikke en ørn til c# - men mangler der ikke noget autowireup=true ?
14. november 2007 - 00:25
#25
samt plejer Page_Load ikke se sådan ud : void Page_Load(object sender, System.EventArgs e) ?
14. november 2007 - 07:26
#26
Korrekt på begge punkter. Iøvrigt ville jeg da selv have placeret Page_Load() i codebehind - men det er ikke så relevant for den nuværende problemstilling.
26. november 2007 - 17:13
#27
Er du kommet vidre med denne her?
03. december 2007 - 18:52
#28
??
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.