Avatar billede arh1 Nybegynder
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#
Avatar billede arh1 Nybegynder
25. oktober 2007 - 14:20 #1
hov. jeg glemte lige at skrive den sidste } ind, men det er ikke det, der er problemet. :p
Avatar billede nielle Nybegynder
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.
Avatar billede softspot Forsker
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)...?
Avatar billede nielle Nybegynder
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';";
Avatar billede nielle Nybegynder
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'";
Avatar billede softspot Forsker
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...
Avatar billede nielle Nybegynder
25. oktober 2007 - 14:39 #7
Også det. :^)
Avatar billede arh1 Nybegynder
25. oktober 2007 - 19:39 #8
jeg gjorde som nielle sagde men det virker ikke :s
Avatar billede nielle Nybegynder
25. oktober 2007 - 19:41 #9
Har du flyttet definitionen af privat-variablen udenfor din Page_load() funktion?
Avatar billede arh1 Nybegynder
26. oktober 2007 - 17:20 #10
Nej. jeg har flyttet allesammen nu. men det virker stadig ikke.
Avatar billede arh1 Nybegynder
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>
Avatar billede nielle Nybegynder
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>
Avatar billede nielle Nybegynder
06. november 2007 - 17:30 #13
Har du fået kigget på det?
Avatar billede arh1 Nybegynder
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]
Avatar billede nielle Nybegynder
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);
Avatar billede arh1 Nybegynder
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>
Avatar billede nielle Nybegynder
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>");
Avatar billede arh1 Nybegynder
08. november 2007 - 23:03 #18
hm når jeg sætter det ind skriver den det samme :s
Avatar billede nielle Nybegynder
09. november 2007 - 06:45 #19
Der må da blive udskrevet noeget med "DEBUG ..." ?
Avatar billede arh1 Nybegynder
11. november 2007 - 15:23 #20
hvad mener du
Avatar billede nielle Nybegynder
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:".
Avatar billede arh1 Nybegynder
13. november 2007 - 23:02 #22
det gør den ikke. hm er du sikker på, at fejlen ligger i forespørgelsen til mysql?
Avatar billede nielle Nybegynder
13. november 2007 - 23:10 #23
Lige nu virker det bare som om at din Page_Load() slet ikke bliver kaldt overhovedet...
Avatar billede neoman Novice
14. november 2007 - 00:20 #24
nu er jeg ikke en ørn til c# - men mangler der ikke noget autowireup=true ?
Avatar billede neoman Novice
14. november 2007 - 00:25 #25
samt plejer Page_Load ikke se sådan ud : void Page_Load(object sender, System.EventArgs e)  ?
Avatar billede nielle Nybegynder
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.
Avatar billede nielle Nybegynder
26. november 2007 - 17:13 #27
Er du kommet vidre med denne her?
Avatar billede nielle Nybegynder
03. december 2007 - 18:52 #28
??
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