示例#1
0
        /// <summary>
        /// Når har valgt en fiskeplads fra listen og bliver sendt ind på en detalje siden, altså denne side,
        /// så skal vi bruge et ID fra URLen, så vi ved hvilken fiskeplads vi skal hente i databasen.
        /// I HTML siden står der øverst: @page "{fiskepladsId}"
        /// Som giver os mulighed for, at vi kan få et ID med i URLen.
        /// URLen bliver således: lystfiskernet.dk/fiskePlads/1
        /// Metoden OnGet tager derfor en parameter, fiskePladsId (meget vigtigt at denne hedder det samme som i HTMLen)
        /// Og så kan vi bruge ID'et til at slå op i databasen.
        /// Spørgsmålstegnet efter int (en datatype for tal) betyder at den kan være null, dvs. at den ikke er kommet med.
        /// </summary>
        /// <param name="fiskepladsId"></param>
        public IActionResult OnGet(int?fiskepladsId)
        {
            // et bool er en datatype, som kun kan være to ting. Sandt eller falsk eller 0 / 1;
            // Her vil vi gerne tjekke at fiskePladsId variablen har en værdi
            // og den nok ikke er 0. (Vi har nok aldrig nogen ID'er i databasen med værdien null).
            bool erFiskePladsIdTomt = fiskepladsId == null || fiskepladsId == 0;

            // Hvis ID'et er tomt, fx. at man ikke har skrevet et ID i URLen (lystfiskernet.dk/fiskePlads/)
            // Så vil vi ikke kalde ned i databasen, men i stedet, måske redirecte til en 404 HTML siden med en fejlbeskrivelse.
            if (erFiskePladsIdTomt)
            {
                return(RedirectToPage("Error"));
            }

            // Hvis det ikke er tomt, så kan vi bruge det.
            using (var sqlConnection = _sqlConnectionFactory.CreateSqlConnection())
            {
                // En meget simpel SQL Query, som henter alt i FISKEPLADSER tabellen.
                var query = "SELECT * FROM Fiskepladser WHERE ID = @Id";

                // Vi skal huske at åbne vores forbindelse til SQL Serveren.
                sqlConnection.Open();

                // Her sender vi så vores Query ned til SQL Serveren.
                using (var command = new SqlCommand(query, sqlConnection))
                {
                    // Nu skal vi jo finde den fiskeplads, som stemmer overens med det ID, som står i URL'en.
                    // Derfor skal vi have sendt en parameter med ind til vores SQL query. Det gør som vist her.
                    // Det er vigtigt, at man ikke begynder og klippe SQL sætninger med værdier sammen selv i en tekst string.
                    // Det er en længere forklaring. Man skal gøre, som der er vidst her.
                    command.Parameters.AddWithValue("@Id", fiskepladsId.Value);
                    // Vi fortæller her til SQL Serveren, at vi forventer at få et resultat tilbage. Derfor skal vi bruge ExecuteReader() funktionen.
                    SqlDataReader reader = command.ExecuteReader();

                    // Her kan det blive lidt tricky. Det der vises her kaldes for en "While"-løkke.
                    // Løkken ville blive være med gentage koden i de to curly bracket - { } når den har gennemgået alle de rækker, som vi fik tilbage fra vores query.
                    // Vi forventer dog, at der kun er en række, som passer med dette ID, så løkken skulle kun køre igennem én gang.

                    if (!reader.HasRows)
                    {
                        return(RedirectToPage("Error"));
                    }

                    while (reader.Read())
                    {
                        var fiskepladsName        = reader.GetString(1); // Jeg forventer her, at navne kolonnen er nr. to i rækken i tabellen. Derfor læser jeg fra kolonne 1. Da navnet jo er en string - et stykke tekst - skal jeg derfor bruge GetString metoden.
                        var fiskepladsBeskrivelse = reader.GetString(2); // Jeg forventer her, at beskrivelses kolonnen er nr. tre i rækken i tabellen. Derfor læser jeg fra kolonne 2. Da navnet jo er en string - et stykke tekst - skal jeg derfor bruge GetString metoden.

                        // Og nu hvor vi har fået navnet ud fra databasen, så kan vi sætte det i vores property på linje 30, så det kan vises på HTML siden. (Derfor hvor vi bruger @{Model.Navn} eller @Html.DisplayFor(x => x.Navn))
                        Navn        = fiskepladsName;
                        Beskrivelse = fiskepladsBeskrivelse;
                    }

                    // Nu er vores "while-løkke" færdigt og nu sætter vi Fiskepladser propertyen (Line 27), så vi kan få vist alle fiskepladserne ude på HTML siden.
                }
                return(Page());
            }
        }
示例#2
0
        /// <summary>
        /// OnGet() bliver kaldt, når det er siden bliver loaded. Siden vi er på Fiskepladser siden, som nok viser alle fiskepladser i en tabel, så ville man nok tage fat i databasen her og hente alle fiskepladserne op.
        /// </summary>
        public void OnGet()
        {
            var fiskepladser = new List <Fiskeplads>();

            // Når man har med I/O operationer, dvs. operationer som foregår eksternt i applikationer, fx. at snakke med en database, som hostes et andet sted end web serveren, så er det vigtigt, at man husker, at lukke forbindelsen til databasen igen
            // Så man undgår at "leake" forbindelser og eventuelt løbe "tør" for forbindelser. Ved at bruge et "using" statement, så hjælper .NET frameworket med at sikre dette. Alt det kode, som er indkapsuleret i de to curly brackets - { }
            // er der for omfattet af denne sikring. Så herinde ville vi skrive vores SQL query til at hente fiskepladser.
            using (var sqlConnection = _sqlConnectionFactory.CreateSqlConnection())
            {
                // En meget simpel SQL Query, som henter alt i FISKEPLADSER tabellen.
                var query = "SELECT * FROM Fiskepladser";

                // Vi skal huske at åbne vores forbindelse til SQL Serveren.
                sqlConnection.Open();

                // Her sender vi så vores Query ned til SQL Serveren.
                using (var command = new SqlCommand(query, sqlConnection))
                {
                    // Vi fortæller her til SQL Serveren, at vi forventer at få et resultat tilbage. Derfor skal vi bruge ExecuteReader() funktionen.
                    SqlDataReader reader = command.ExecuteReader();

                    // Her kan det blive lidt tricky. Det der vises her kaldes for en "While"-løkke.
                    // Løkken ville blive være med gentage koden i de to curly bracket - { } når den har gennemgået alle de rækker, som vi fik tilbage fra vores query.
                    while (reader.Read())
                    {
                        var fiskepladsId          = reader.GetInt32(0);  // Jeg forventer her, at ID kolonnen er den første i tabellen. Derfor læser jeg fra kolonne 0. Indekses starter altid ved 0. Da jeg ved at ID'et er et tal, skal typen derfor være en "int" - også kaldet en integer.
                        var fiskepladsName        = reader.GetString(1); // Jeg forventer her, at navne kolonnen er nr. to i rækken i tabellen. Derfor læser jeg fra kolonne 1. Da navnet jo er en string - et stykke tekst - skal jeg derfor bruge GetString metoden.
                        var fiskepladsBeskrivelse = reader.GetString(2); // Jeg forventer her, at beskrivelses kolonnen er nr. tre i rækken i tabellen. Derfor læser jeg fra kolonne 2. Da navnet jo er en string - et stykke tekst - skal jeg derfor bruge GetString metoden.

                        // Så tilføjer vi den første fiskeplads til vores liste, som står på linje 34.
                        fiskepladser.Add(new Fiskeplads
                        {
                            Id          = fiskepladsId,
                            Name        = fiskepladsName,
                            Description = fiskepladsBeskrivelse
                        });
                    }

                    // Nu er vores "while-løkke" færdigt og nu sætter vi Fiskepladser propertyen (Line 27), så vi kan få vist alle fiskepladserne ude på HTML siden.
                    Fiskepladser = fiskepladser;
                }
            }
        }