WebMatrix – budujemy serwis oparty na bazie danych z funkcjonalnością CRUD  Udostępnij na: Facebook

Autor: Tomasz Kowalczyk

Opublikowano: 2011-07-08

Pobierz i uruchom

Wprowadzenie

Poniższy artykuł jest ostatnim z serii artykułów przedstawiających Microsoft WebMatrix, narzędzie umożliwiające stworzenie w prosty sposób pierwszego serwisu Web. Po zapoznaniu się z informacjami zawartymi w tym artykule będziesz:

  • wiedział, jak zbudować serwis korzystający z bazy danych za pomocą WebMatrix;
  • umiał zdefiniować wzorzec CRUD (Create, Retrieve, Update, Delete);
  • wiedział, jak zaimplementować w prosty sposób funkcjonalność CRUD w swoim serwisie.

Rozpoczynając pracę opartą na poniższym artykule, będziesz potrzebował projektu, który wykonaliśmy wcześniej  (patrz  trzeci artykuł z tego cyklu pt. „WebMatrix: Korzystamy z Facebook Helpers”).

Efektem wykonania instrukcji zawartych w tym artykule będzie wersja naszego serwisu w pełni korzystająca z bazy danych. Zarówno odnośniki do poszczególnych stron, jak i ich zawartość będą pobierane bezpośrednio z utworzonej przez nas bazy. Zarządzanie zawartością stron będzie możliwe poprzez utworzony przez nas plik Admin.cshtml, gdzie będziemy mogli edytować treść poszczególnych stron oraz je dodawać i usuwać.

Informacja
Należy tutaj pamiętać, iż tak stworzony projekt należy traktować czysto edukacyjnie, gdyż pod względem bezpieczeństwa pozostawia on wiele do życzenia – choćby ze względu na to, że plikAdmin.cshtml, choć nie będzie jawnie widoczny, dostępny będzie dla każdego.

Kod źródłowy zawarty w tym artykule znajdziesz tutaj.

Implementacja

Po otworzeniu projektu wykonanego zgodnie z treścią zawartą we wcześniejszym artykule, najpierw dodamy bazę danych do naszego serwisu. Aby to uczynić, wykonaj poniższe kroki:

Tworzenie bazy danych

1. W lewym dolnym rogu ekranu kliknij Databases – na środku ekranu pojawi się napis Add a databse to your site, który również klikamy.

2. Pozostawiamy domyślną nazwę bazy danych, która odpowiada nazwie naszego serwisu (Pierwsza strona).

Informacja
Podczas dodawania kolejnych kolumn pamiętaj, aby jedynie pierwszej z nich, o nazwie – id, nadać atrybuty Is identity? oraz Is Primary key? wartość – True.

 

3. Nasza baza danych będzie składać się z jednej tabeli, którą również dodajemy, klikając ikonę New Table znajdującą się w lewym górnym rogu ekranu. Tabeli tej nadaj nazwę Strona. Tabela będzie zawierać cztery kolumny – będą to kolejno (id, plik, tytul, tresc), które dodajemy za pomocą ikony New Column. Poprawny układ tabeli przedstawiony został na rysunku 1:

Rys.1. Układ tabeli Strona.

Zawartość oraz budowa tej tabeli nie jest zupełnie przypadkowa (poniżej znajduje się wyjaśnienie, dzięki któremu zrozumiesz, dlaczego została ona zaprojektowana właśnie w ten sposób). Przede wszystkim musisz zdać sobie sprawę z tego, że pojedynczy rekord (pod pojęciem „rekord” rozumiemy pojedynczy wiersz zawartości tabeli z rysunku 2) tabeli będzie zawierał dane dla pojedynczej strony naszego serwisu:

  • id – unikalny identyfikator dla każdego rekordu znajdującego się w tabeli. Pozwoli on nam na jednoznaczne rozróżnienie pojedynczej strony;
  • plik – to ciąg znaków definiujących plik, który będzie przechowywał zawartość danej strony pisany bez rozszerzenia (w naszym przypadku bez .cshtml);
  • tytul – tytuł strony, który będzie widoczny w horyzontalnym menu na każdej stronie oraz na początku treści każdej z nich;
  • tresc – w tym polu będziemy przechowywać treść każdej ze stron naszego serwisu.

4. Tak utworzoną tabelę zapisujemy, klikając ikonę dyskietki z lewego górnego rogu lub naciskając kombinację klawiszy Ctrl + S.

5. Utworzoną tabelę wypełnimy jeszcze przykładowymi danymi – aby to zrobić, kliknij ikonę Data
z lewego górnego rogu narzędzia WebMatrix. Tabelę z przykładowymi danymi przedstawia rysunek 2:

Rys.2. Tabela Strona wypełniona przykładowymi danymi.

6. Następnie klikamy dwukrotnie nagłówek Files z lewego dolnego ekranu, by przejść do edycji plików wchodzących w skład serwisu.

 

Połączenie z bazą danych

Informacja
CRUD jest to wzorzec  wyjaśniający, w jaki sposób możemy korzystać z danych. Definiuje on operacje tworzenia, odczytu, aktualizacji i usuwania danych z serwisu.

 

Omówię tutaj najważniejsze fragmentu kodu, które mają kluczowe znaczenie dla działania serwisu, natomiast pełny kod źródłowy projektu można pobrać za pomocą odnośnika znajdującego się na końcu tego artykułu.

Otwórz plik _SiteLayout.cshtml i na początku wklej niżej przedstawiony kod, który posłuży nam do połączenia z bazą danych:

@{
                    var db = Database.Open("PierwszaStrona");
                    var sql = "Select * from Strona";
                    var data = db.Query(sql);
         }

W pierwszej linijce zmiennejdb przypisujemy otwarcie połączenia z bazą danych PierwszaStrona, w drugiej linijce pobieramy zapytaniem SQL wszystkie dane z tabeli Strona i zapisujemy je do zmiennej sql. Następnie wykonujemy zapytanie SQL na bazie danych, z którą mamy połączenie.

Aby wyświetlić dane pobrane z bazy danych w postaci odnośników do poszczególnych stron naszego serwisu, posłużymy się poniższym kodem, zastępującym obecny kod zaraz po znaczniku <body>:

<div id="header">
            <ul id="menu">
                @foreach(var row in data){
                <li><a href="@(row.plik).cshtml">@row.tytul</a></li>
                }
            </ul>
        </div>

W pętli foreach rozdzielamy dane pobrane z bazy znajdujące się w zmiennej data w taki sposób, aby każdy rekord z tabeli Strona znajdował się w zmiennej row w ramach kolejnych przebiegów pętli. W naszym przypadku będą to trzy pętle, gdyż w tabeli Strona znajdują się dokładnie trzy rekordy. Taka operacja pozwoli nam mieć dostęp do atrybutów poszczególnych rekordów, stosując składnię zgodną z wzorem @row.ATRYBUT, gdzie ATRYBUT to nazwa kolumny z tabeli Strona.

Wyświetlanie rekordów

Aby mieć możliwość dodawania nowych stron, utwórz plik Admin.cshtml, który będzie nam na to pozwalał. W jego treści na początku umieść ten sam fragment kodu, który znalazł się w pliku _SiteLayout.cshtml, oraz dodatkowo poniższy kod:

@foreach(var row in data){
                    <p>@row.tytul</p>
                    <p>@row.plik</p>
                    <p>@row.tresc</p>
                    <p>
                        <a href="EditPage.cshtml?id=@row.id">Edytuj stronę</a><br>
                        <a href="DeletePage.cshtml?id=@row.id">Usuń stronę</a>
                    </p>
                <hr/>
                }
                <a href="AddPage.cshtml">Dodaj stronę</a>

Zadaniem tego kodu jest wyświetlenie wszystkich rekordów znajdujących się w tabeli Strona. Kod ten zawiera również dwa odnośniki do stron EditPage.cshtml i DeletePage.cshtml, które będą służyły kolejno do edycji i usuwania stron. Aby w kodzie stron służących do edycji i usuwania zawartości tabeli rozróżnić, który rekord chcemy edytować, zmiennej id przypisujemy wartość każdego rekordu pobranego z bazy za pomocą @row.id.

Dodawanie rekordów

Aby dodać nowy rekord, utwórz plik AddPage.cshtml, który będzie zawierał formularz z polami odpowiadającymi polom poszczególnego rekordu w tabeli, czyli będą to pola Plik, Tytuł i Treść oraz przycisk Dodaj, po którego wciśnięciu wpisane przez nas dane zostaną dodane do bazy.

Sam kod odpowiedzialny za dodanie nowych danych do bazy znajduje się poniżej:

@{
            var PagePlik="";
            var PageTytul="";
            var PageTresc="";
            if(IsPost)
            {
                PagePlik=Request["formPlik"];
                PageTytul=Request["formTytul"];
                PageTresc=Request["formTresc"];
                
                var sqlInsert = "Insert into Strona (plik, tytul, tresc) values (@0, @1, @2)";
                var db = Database.Open("PierwszaStrona");
                db.Execute(sqlInsert, PagePlik, PageTytul, PageTresc);
                
                Response.Redirect("Admin.cshtml");
            }
        }

Kod ten za pomocą polecenia SQL – insert dodaje do bazy danych dane pobrane z odpowiednich pól formularza. Po wykonaniu operacji dodawania zostajemy przeniesieni do strony Admin.cshtml, gdzie zobaczymy nową dodaną stronę wraz z pozostałymi wcześniejszymi.

Informacja
Pamiętaj, że do poprawnego wyświetlenia się dodanej strony wymagane jest utworzenie pliku zgodnego z wzorem PLIK.cshtml, gdzie PLIK to wartość atrybutu plik z tabeli Strona.

Edycja danych

W celu edytowania istniejących rekordów utwórz najpierw plik EditPage.cshtml zawierający formularz, do którego zostaną wczytane dane dotyczące edytowanej strony z bazy danych poprzez rozróżnienie ich za pomocą pola id, przekazanego przez pasek adresu. Strona EditPage.cshtml jest wywoływana ze strony Admin.cshtml, gdzie w odnośniku przekazywany jest identyfikator id edytowanej strony. Rysunek 3prezentuje ekran umożliwiający edycję strony:

Rys.3. Strona umożliwiająca edycję zawartości serwisu.

Usuwanie danych

W celu usunięcia rekordu znajdującego się w bazie utwórz najpierw plik DeletePage.cshtml. Zasada działania kodu znajdującego się w tym pliku będzie analogiczna do kodu z EditPage.cshtml, z tą jednak różnicą, że zamiast polecenia SQL – update zostanie wywołane polecenie SQL – delete. Kod rozpozna rekord, który ma usunąć zgodnie z metodą zastosowaną w pliku EditPage.cshtml. Strona DeletePage.cshtml jest wywoływana ze strony Admin.cshtml, gdzie w odnośniku przekazywany jest identyfikator id usuwanej strony. Przed usunięciem strony wyświetlony zostanie ekran z poleceniem potwierdzenia tej operacji – przedstawiony na rysunku 4:

Rys.4. Strona dająca możliwość usunięcia zawartości serwisu.

 

Podsumowanie

W tym artykule poznaliśmy, jak za pomocą narzędzia WebMatrix możemy korzystać z relacyjnej bazy danych i na jej podstawie zbudować serwis Web. Proces tworzenia bazy danych oraz modelowania jej zawartości, czyli tworzenie tabel oraz wypełnianie jej danymi realizowany przy użyciu WebMatrix, jest prosty i intuicyjny, czego przykładem będzie zbudowany przez nas serwis.

Wiemy również, co to jest CRUD oraz jak w najprostszy sposób zaimplementować funkcjonalność dostarczaną nam przez ten wzorzec. Rozbudowując powstały projekt i zwracając uwagę na bezpieczeństwo, będziesz w stanie stworzyć w pełni funkcjonalny i nowoczesny serwis WWW.