Dostęp do baz danych w ASP.NET. Kontrolki źródeł danych i

Transkrypt

Dostęp do baz danych w ASP.NET. Kontrolki źródeł danych i
Ćwiczenie 12
Temat:
Dostęp do baz danych
w ASP.NET.
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie
i edycja danych.
Cel ćwiczenia:
W ramach ćwiczenie student zapozna się z kontrolkami umożliwiającymi
dostęp, wyświetlanie zawartości oraz edycję danych w bazie danych. Pozna
także metody wykorzystania innych kontrolek do filtrowania wyników
wyświetlonych z bazy. Uwaga! Celem ćwiczenie nie jest zapoznanie studenta z
językiem zapytań baz danych – SQL, ponieważ zagadnienie to jest tematem
innego kursu.
Strony internetowe korzystające z baz danych
Zastosowanie baz danych do przechowywania uporządkowanych informacji np. o klientach,
hasłach użytkowników, ich preferencjach czy o oferowanych produktach jest bardzo
popularnym zabiegiem podczas tworzenia zaawansowanych serwisów WWW. Serwer WWW
poprzez wykorzystanie odpowiednich mechanizmów komunikacji z serwerem baz danych
pobiera, aktualizuje lub kasuje informacje, a następnie na ich podstawie buduje dynamiczną
stronę dla użytkownika serwisu:
Serwer baz danych
Serwer WWW
Użytkownik serwisu
Kontrolka źródła danych
Technologia ASP.NET umożliwia komunikację z serwerami baz danych m.in. za pomocą
kontrolki źródła danych – SQLDataSource. Kontrolka ta umożliwia:
•
pobieranie danych z bazy (SelectQuery)
•
dodawanie danych do bazy (InsertQuery)
•
aktualizację danych w bazie (UpdateQuery)
•
kasowanie danych z bazy (DeleteQuery)
Wyżej wymienione akcje definiowane są we właściwościach kontrolki, w polach podanych w
powyższych nawiasach. Edycja wyżej wymienionych właściwości kontrolki odbywa się za
pomocą formatki „Command and Parameter Editor” (patrz poniższy screen), która umożliwia
utworzenie zapytanie SQL (ręcznie, lub za pomocą narzędzia „Query builder”) a także
definicję parametrów zapytania oraz przypisanie wartości pobranych z innych kontrolek do
tych parametrów.
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
110
Parametry połączenia z bazą - ConnectionString
Kontrolka źródła danych do poprawnego działania potrzebuje wskazania parametrów
połączenia z bazą (tzw. definicja danych połączenia „Connection String”), które mogą zostać
wskazane we właściwościach kontrolki w polu ConnectionString. Jeśli w środowisku Visual
Studio nie były jeszcze definiowane żadne połączenia z bazą, do wyboru będzie możliwe
tylko uruchomienie kreatora nowego połączenia:
W pierwszym kroku kreator pyta o mechanizm bazy danych, a w kolejnym o parametry
połączenia z bazą: w przypadku, gdy bazą jest lokalny plik np. pochodzący z programu MS
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
111
Access, parametrem będzie ścieżka do pliku oraz hasło i nazwa użytkownika na prawach
którego aplikacja będzie komunikować się z bazą. W przypadku, gdy bazą danych jest serwer
baz danych, podczas konfiguracji wskazać należy adres serwera, dane użytkownika oraz
nazwę bazy danych.
Parametry połączenia zapisane mogą zostać także w pliku web.config za pomocą znacznika:
<connectionStrings>
<add name="klienciConnectionString"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\
klienci.mdb" providerName="System.Data.OleDb" />
</connectionStrings>
Kontrolka widoku danych
Użycie wyżej opisanej kontrolki SQLDataSource powoduje nawiązanie połączenia z bazą oraz
realizację wymiany danych (pobranie danych, wysłanie danych do bazy lub też wysłanie
polecenia usunięcia danych). Jednak sama kontrolka nie jest w stanie wyświetlić na stronie
pobranych z bazy danych. W tym celu wykorzystana może zostać kontrolka tabelarycznego
widoku danych – GridView. W najprostszym scenariuszu wystarczy w parametrach kontrolki
GridView wskazać źródło danych np. wcześniej poprawnie skonfigurowaną instancję
kontrolki SQLDataSource i już po uruchomieniu aplikacji kontrolka GridView wyświetli dane
pobrane z bazy przez kontrolkę SQLDataSource.
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
112
Zadanie 1
Wykorzystując kontrolkę SQLDataSource oraz kontrolkę GridView wyświetlić dane z bazy
danych MS Access. Stworzyć dla strony menu osadzone w stronie wzorcowej MasterPage. W
celu realizacji zadania postępuj zgodnie z poleceniami:
1. Utwórz nowy projekt strony (WebSite) o nazwie „BazaKlientow”. Dodaj do projektu plik
strony wzorcowej MasterPage.master oraz plik mapy strony Web.sitemap
2. Edytuj plik mapy strony:
2.1. W głównej gałęzi (siteMapNode) umieść dwia podrzędne elementy:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="" description="">
<siteMapNode url="Klienci.aspx" title="Klienci" description="" />
<siteMapNode url="Statystyki.aspx" title="Statystyki" description=""
/>
</siteMapNode>
</siteMap>
3. Edytuj plik strony wzorcowej MasterPage.master:
3.1. Dodaj do strony wzorcowej kontrolki: Menu oraz SiteMapDataSource.
3.2. We
właściwościach
kontrolki
SiteMapDataSource
zmień
właściwość
ShowStartingNode na wartość false
3.3. We właściwościach kontrolki Menu zmień właściwość DataSourceID
wskazując
kontrolkę SiteMapDataSource jako źródło danych
3.4. We właściwościach kontrolki Menu zmień właściwość Orientatnion
na wartość
Horizontal
4. Pobierz plik, rozpakuj oraz umieść w katalogu, gdzie zapisana została strona internetowa
plik bazy danych: http://kzi.polsl.pl/ti/cwiczenia/klienci.zip
4.1. Otwórz rozpakowany plik w programie MS Access, aby zapoznać się ze strukturą
bazy
5. Dodaj do projektu strony plik Statystyki.aspx, osadź nowy plik we wcześniej utworzonej
stronie wzorcowej, a następnie
5.1. Ustaw stronę Statystyki.aspx jako stronę startową projektu
5.2. Wpisz na stronę Statystyki.aspx zdanie: „Dane statystyczne”
5.3. Dodaj na stronę Statystyki.aspx kontrolkę SQLDataSource oraz kontrolkę GridView
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
113
5.4. We właściwościach kontrolki GridView
wskaż w polu DataSourceID kontrolkę
SQLDataSource jako źródło danych
5.5. We właściwościach kontrolki SQLDataSource w polu
ConnectionString wybierz:
<New connection> a następnie, w kreatorze połączenia:
5.5.1. Wybierz typ bazy: „MS Access Database File” (UWAGA! Odznacz opcję
„Always use this selection”)
5.5.2. Wskaż ścieżkę do pliku
5.5.3. Przetestuj połączenie za pomocą przycisku „Test connection” a następnie
zakończ pracę kreatora
5.6. We właściwościach kontrolki SQLDataSource w polu SelectQuery klikniej w symbol
[...] aby uruchomić kreator zapytań
5.7. W polu Select command wpisz zapytanie do bazy:
SELECT AVG(Wiek) AS ŚredniaWieku, MAX(Wiek)
AVG(PunktyPromocyjne)
AS
ŚredniaPkt,
AS Najstarszy, MIN(Wiek) AS Najmłodszy,
MAX(PunktyPromocyjne)
AS
MaxPkt,
MIN(PunktyPromocyjne) AS MinPkt FROM Klienci
* Wyjaśnienie zapytania SQL: Powyższe zapytanie wyświetla statystki dla pól (kolumn) w tabeli
klienci: średnią wieku klientów, wiek najstarszego i najmłodszego klienta oraz takie same statystyki
dla kolumny „PunktyPromocyjne”
5.8. Zatwierdź poprzez OK
5.9. We właściwościach kontrolki GridView w polu Columns klikniej w symbol [...] aby
zmienić nazwy kolumn (właściwość Header Text) na odpowiednio:
5.10.
•
Średnia wieku klientów
•
Wiek najstarszego klienta
•
Wiek najmłodszego klienta
•
Średnia punktów promocyjnych
•
Maksymalna liczba punktów
•
Minimalna liczba punktów
Uruchom aplikację internetową aby sprawdzić efekt.
6. Dodaj do projektu plik Klienci.aspx, osadź nowy plik we wcześniej utworzoną stronę
wzorcową
6.1. Wpisz na stronę Klienci.aspx zdanie: „Spis klientów”
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
114
6.2. Dodaj na stronę Klienci.aspx DWIE instancje kontrolki SQLDataSource, jedną
kontrolkę GridView oraz Kontrolkę DropDownList
6.3. We właściwościach kontrolek SQLDataSource1 oraz SQLDataSource2 w polach
ConnectionString wybierz wcześniej utworzone połączenie do pliku bazy danych
6.4. We właściwościach kontrolki SQLDataSource1 w polu SelectQuery kliknij w symbol
[...] aby uruchomić kreator zapytań
6.5. W polu Select command wpisz zapytanie do bazy:
SELECT * FROM [Klienci] WHERE ([Miasto] = @miasto)
* Wyjaśnienie zapytania SQL: Powyższe zapytanie wyświetla wszystkich klientów, którzy mieszkają w
mieście zdefiniowanym przez parametr „@miasto”
6.6. Wciśnij guzik „Add Parameter” aby określić nowy parametr. Wprowadź nazwę dla
parametu: miasto, a następnie w polu Parameter Source wskaż, iż źródłem dla
parametru jest wartość kontrolki (Control) a następnie wybierz ControlID:
DropDownList1
6.7. Zatwierdź poprzez OK
6.8. We właściwościach kontrolki SQLDataSource2 w polu SelectQuery kliknij w symbol
[...] aby uruchomić kreator zapytań
6.9. W polu Select command wpisz zapytanie do bazy:
SELECT Miasto FROM Klienci GROUP BY Miasto
* Wyjaśnienie zapytania SQL: Powyższe zapytanie wyświetla wszystkie unikalne miasta (bez
powtórzeń) w których mieszkają klienci
6.10.
Zatwierdź poprzez OK
6.11.
We właściwościach kontrolki GridView wskaż w polu DataSourceID kontrolkę
SQLDataSource1 jako źródło danych
6.12.
We właściwościach kontrolki DropDownList
wskaż w polu DataSourceID
kontrolkę SQLDataSource2 jako źródło danych, a następnie wartość pola
AutoPostBack ustaw na true
6.13.
Kliknij dwa razy w trybie „Design” strony w kontrolkę DropDownList1 aby
utworzyć w pliku .cs metodę wykonywane gdy zmieni się wybrana pozycja na liście, a
następnie w ciele metody wpisz (w celu odświeżenia zawartości kontrolki GridView
po zmianie wybranego miasta):
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
115
protected void DropDownList1_SelectedIndexChanged(object sender,
EventArgs e)
{
GridView1.DataBind();
}
6.14.
Uruchom aplikację internetową aby sprawdzić efekt.
Edycja danych w bazie
Jak już wspominano wcześniej, kontrolka SQLDataSource ma możliwość także dodawania,
kasowania i aktualizacji danych w bazie. Każda kontrolka SQLDataSource może mieć
jednocześnie zdefiniowane polecenie wyświetlające, usuwające, aktualizujące lub dodające
dane. Wywołanie odpowiedniej komendy może zostać realizowane za pomocą metod
wbudowanych kontrolki z użyciem kodu c#, np. wywołanie:
•
wyświetlenia danych: SqlDataSource1.Select();
•
dodawanie danych: SqlDataSource1.Insert();
•
kasowanie danych: SqlDataSource1.Delete();
•
aktualizacja: SqlDataSource1.Update();
Do tworzenia odpowiednich zapytań służą odpowiednia pola we właściwościach kontrolki
SQLDataSource (SelectQuery, InsertQuery, DeleteQuery, UpdateQuery) i tak jak w przypadku
polecenia Select polecenia mogą zostać sparametryzowane, a wartości parametrów mogą
być pobierane z kontrolek serwerowych.
Zadanie 2 – Dodawanie i usuwanie klientów
1. Edytuj plik mapy strony:
1.1. Dodaj do mapy strony kolejną podstronę:
<siteMapNode url="NowyKlient.aspx" title="Nowy klient"
description=""
/>
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
116
2. Dodaj do projektu plik NowyKlient.aspx, osadź nowy plik we wcześniej utworzonej
stronie wzorcowej, a następnie:
2.1. Dodaj na stronę na stronę NowyKlient.aspx kontrolkę SQLDataSource oraz kontrolkę
GridView
3. We właściwościach kontrolki GridView
wskaż w polu DataSourceID kontrolkę
SQLDataSource1 jako źródło danych
4. We właściwościach kontrolki SQLDataSource1 w polu ConnectionString wybierz wcześniej
utworzone połączenie do pliku bazy danych
5. We właściwościach kontrolki SQLDataSource1 w polu SelectQuery kliknij w symbol [...]
aby uruchomić kreator zapytań
5.1. W polu Select command wpisz zapytanie do bazy:
SELECT TOP 10 Identyfikator, Nazwisko, Imie, PunktyPromocyjne, Wiek, Miasto, Ulica, NrDomu,
NrMieszkania FROM Klienci ORDER BY Identyfikator DESC
* Wyjaśnienie zapytania SQL: Polecenie wyświetla wszystkie pola z tabeli Klienci ale tylko dla 10
ostatnich zapisanych w tabeli rekordów (top 10 – oznacza iż powinny zostać wyświetlone pierwsze 10
rekordów, jednak dopisek DESC sortuje rekordy w odwrotnej kolejności, stąd wyświetlone zostanie 10
ostatnich rekordów)
6. Dodatkowo dodaj na stronę następujące kontrolki, odtwarzając poniższy układ:
7. We właściwościach kontrolki SQLDataSource1 w polu InsertQuery kliknij w symbol [...]
aby uruchomić kreator zapytań
7.1. W polu Select command wpisz zapytanie do bazy:
INSERT INTO Klienci(Nazwisko, Imie, PunktyPromocyjne, Wiek, Miasto, Ulica, NrDomu, NrMieszkania)
VALUES (@na, @im, 0, @wi, @mi, @ul, @nrDo, @nrMi )
* Wyjaśnienie zapytania SQL: Polecenie dodaje do tabeli Klienci w pola określone w pierwszym nawiasie
wartości określone w nawiasie drugim, a tutaj są nimi symbole parametrów
7.2. Zdefiniować parametry zapytania, tak aby dane dodawane jako nowy rekord
pobierane były z pól tekstowych. Wzór poniżej:
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
117
8. Kliknij dwa razy w trybie „Design” strony w kontrolkę przycisku „Dodaj” aby utworzyć w
pliku .cs metodę wykonywaną gdy po naciśnięciu guzika, a następnie w ciele metody
wpisz poniższe polecenia, w celu wykonania polecenia utworzenia nowego rekordu w
bazie a następnie odświeżenia zawartości kontrolki GridView
protected void Button1_Click(object sender, EventArgs e)
{
SqlDataSource1.Insert();
GridView1.DataBind();
}
9. Uruchom aplikację internetową aby sprawdzić efekt.
10. Dodatkowo dodaj na stronę następujące kontrolki, odtwarzając poniższy układ:
Kontrolki źródeł danych i wizualizacyjne. Wyświetlanie i edycja danych.
118
11. We właściwościach kontrolki SQLDataSource1 w polu DeleteQuery kliknij w symbol [...]
aby uruchomić kreator zapytań
11.1.
W polu Select command wpisz zapytanie do bazy:
DELETE FROM Klienci WHERE Identyfikator=@id
* Wyjaśnienie zapytania SQL: Polecenie kasuje z tabeli Klienci rekord, którego identyfikator jest równy
wartości przekazanej jako parametr
11.2.
Zdefiniować parametr zapytania, tak aby identyfikator rekordu do usunięcia
wskazywany był z pola tekstowego dodanego w punkcie 10 tego zadania.
12. Uruchom aplikację internetową aby sprawdzić efekt.
Połączenia z bazą za pomocą kodu c#
Możliwym jest także wykorzystanie kodu c# do wywołania połączenia z bazą. W celu
realizacji połączenia, skorzystać należy z typów i poleceń dostępnych w przestrzeni nazw:
using System.Data.OleDb;
Przykład
Poniższy
przykład prezentuje wykorzystanie składni c# do nawiązanie połączenia, a
następnie za pomocą pętli while do dynamicznego zbudowania tabeli, której zawartość
pobrana została z bazy (tabeli Klienci). Pamiętać należy, że aby zadziałał poniższy przykład w
pliku Web.config istnieć musi definicja połączenia (Connection String) o nazwie:
„klienciConnectionString”
try
{
OleDbConnection myConnection = new
OleDbConnection(System.Web.Configuration.WebConfigurationManager.Connection
Strings["klienciConnectionString"].ConnectionString);
OleDbDataReader myReader = null;
OleDbCommand myCommand = new OleDbCommand("select * from Klienci",
myConnection);
myConnection.Open();
myReader = myCommand.ExecuteReader();
Response.Write("<table border=1>");
while (myReader.Read())
Przykład
119
{
Response.Write("<tr><td>" + myReader["Nazwisko"].ToString() + "</td>");
Response.Write("<td>" + myReader["Imie"].ToString() + "</td>");
Response.Write("<td>" + myReader["Wiek"].ToString() + "</td></tr>");
}
Response.Write("</table>");
}
catch (Exception exep)
{
Response.Write(exep.ToString());
}
Przykład
120

Podobne dokumenty