16. Metody dostępu do danych - wprowadzenie

16. Metody dostępu do danych - wprowadzenie

Autor: Piotr Gaszewski

Opublikowano: 5/26/2006, 12:00 AM

Liczba odsłon: 93840

Obecnie większość witryn istniejących w sieci Internet, w swoim działaniu wykorzystuje zewnętrzne źródła danych. Mogą to być zwykłe pliki tekstowe, umieszczone na dysku komputera, pliki XML, proste bazy typu Access, czy też zaawansowane systemy bazodanowe(takie jak na przykład Oracle, czy SQL Server). Aplikacje internetowe często odpowiedzialne są za prezentowanie użytkownikowi ogromnych ilości danych. Z drugiej strony, witryna musi też przechowywać dane wprowadzane przez użytkownika. W tym oraz w kolejnych rozdziałach naszego kursu zostaną omówione sposoby dostępu do danych, które możemy stosować tworząc naszą aplikację internetową. Skoncentruję się przede wszystkim na współpracy aplikacji ASP.NET z bazą danych SQL Server firmy Microsoft, a także z niezwykle popularnych w ostatnich latach plików w formacie XML.

Zastanówmy się teraz, jakie warunki muszą być spełnione, żebyśmy mogli ujrzeć w oknie przeglądarki dane, pochodzące z systemu bazodanowego. Po pierwsze, witryna musi wiedzieć, gdzie w sieci znajduje się baza danych, zawierająca pożądane informacje. Następnie musi zostać ustanowione połączenie z bazą danych i sprawdzenie, czy aplikacja internetowa ma odpowiednie prawa dostępu do danych. Nie będę omawiał w tym miejscu kwestii identyfikacji i autoryzacji aplikacji przez system bazodanowy, jako że temat ten jest zbyt obszerny i wykracza poza nasz aktualny obszar zainteresowań. Załóżmy w tym miejscu, że aplikacja ma wszelkie potrzebne uprawnienia, do uzyskania dostępu do danych zgromadzonych na serwerze bazodanowym. Kolejnym krokiem będzie więc wysłanie przez naszą aplikację zapytania, o zwrócenie przez serwer konkretnych danych. Tego typu zapytania najczęściej konstruowane są w języku SQL (lub jego rozmaitych dialektów). Po otrzymaniu odpowiedzi, zawierającej pożądane informacje, kolejnym zadaniem aplikacji jest zamknięcie połączenia z bazą danych oraz wyświetlenie danych w oknie przeglądarki użytkownika. Kolejność tych czynności nie zawsze jest taka sama. Przykładowo nowoczesna aplikacja ASP.NET jest w stanie odczytać informacje z serwera bazodanowego, zakończyć połączenie i dopiero później wykonywać operacje na pobranych danych.

Aby rozpocząć pracę z bazą danych wymagana jest przynajmniej podstawowa znajomość języka SQL (Structured Query Language). W dalszej części kursu będziemy generalnie wykorzystywać cztery podstawowe operacje na danych.

1. Pobranie danych z tabeli.

Do pobierania danych z jednej lub kliku tabeli w bazie danych służy polecenie SELECT. Jego składnia w najprostszej wersji może przedstawiać się następująco:

SELECT kolumna1, kolumna2 FROM Tabela

Gdzie: kolumna1 i kolumna2 to nazwy kolumn w tabeli w bazie danych, natomiast Tabela, to nazwa konkretnej tabeli. Chcąc pobrać zawartość wszystkich kolumn z bazy danych powyższe zapytanie można zmodyfikować w następujący sposób.

SELECT * FROM Tabela.

Często zdarza się, że chcemy pobrać z tabeli w bazie danych jedynie wiersze spełniające jakiś określony warunek, na przykład takie, w których wartość kolumny o nazwie kolumna3 będzie równa 1. Efekt ten możemy osiągnąć dodając do naszego zapytania instrukcję WHERE.

SELECT * FROM Tabela WHERE kolumna3 = 1

Zaprezentowane powyżej zapytania stanowią jedynie ułamek możliwości polecenia SELECT. Daje ono jeszcze wiele rozmaitych możliwości takich jak na przykład: zwracanie danych zawartych w wielu tabelach, grupowanie wyników zapytania, czy też zwracanie wyników operacji na kolumnach. Wiele unikalnych możliwości gwarantują również poszczególne dialekty języka, takie jak na przykład wykorzystywany przez systemy Microsoftu Transact-SQL, czy też Oracle’owy PL/SQL. Zagadnienia te wykraczają jednak znacznie poza zakres tego artykułu. Serdecznie zachęcam do bardziej szczegółowego zapoznania się z językiem SQL. W Internecie (a także na łamach Centrum XP) możemy odnaleźć wiele kursów (również darmowych) mu poświęconych.

2. Usuwanie wierszy z bazy danych.

Składnia polecenia, służącego do usuwania danych z bazy prezentuje się następująco:

DELETE FROM Tabela.

Polecenie te usunie wszystkie wiersze zawarte w danej tabeli. Jeżeli chcemy usunąć tylko wiersze, spełniające jakiś konkretny warunek, na przykład mające w określonej kolumnie wartość większą od 1, podobnie jak w poprzednim przykładzie musimy użyć polecenia WHERE.

DELETE FROM Tabela WHERE kolumna1 > 1

Dodawanie/modyfikacja wierszy w tabeli.

Do wstawiania nowych wierszy do tabeli w bazie danych służy polecenie INSERT.

INSERT INTO Tabela(kolumna1, kolumna2) VALUES(I, ‘Tekst...’)

Natomiast chcąc zmienić zawartość istniejącego już wiersza, wykorzystujemy polecenie UPDATE. Do określenie, który wiersz (bądź też zbiór wierszy) chcemy zmodyfikować, służy słowo kluczowe WHERE.

UPDATE Tabela SET kolumna1 = 2, kolumna2 = ‘Nowy tekst...’ WHERE kolumna3 = 1

Spróbujmy, zatem zbudować prostą aplikację, pobierającą informacje z bazy danych SQL Server 2005. Aby dobrze zrozumieć zasady działania naszej aplikacji wymagana będzie znajomość języka SQL, przynajmniej w stopniu podstawowym oraz możliwość skorzystania z SQL Servera. Pierwszym krokiem, który będziemy musieli uczynić, jest zdefiniowanie nowego połączenia z bazą danych. W tym celu klikamy lewym przyciskiem myszy na zakładkę Server Explorer w lewej części ekranu, następnie prawym na obiekt Data Connection i wybieramy opcję: „Add Connection”. W okienku, związanym z wyborem źródła danych, wybieramy opcję: Microsoft SQL Server.

Po naciśnięciu przycisku „Continue”, będziemy mogli zobaczyć kolejne okienko, w którym będziemy musieli podać nazwę instancji serwera bazodanowego, wybrać sposób logowania do serwera oraz bazę danych na serwerze. W naszym przypadku wybierzemy bazę Northwind, udostępnianą za darmo przez firmę Microsoft.

Jeżeli nie posiadasz zainstalowanej wykorzystywanej w tym i w kolejnych artykułach bazy Northwind, możesz ją ściągnąć ze stron firmy Microsoft.

Baza ta jest przeznaczona dla systemu bazodanowego SQL Server 2000. Nie ma jednak żadnych przeciwwskazań przed instalowaniem jej na najnowszej wersji SQL Servera (edycja: 2005).

@STRONA@

Chcąc przetestować działanie połączenia możemy nacisnąć, znajdujący się w lewym dolnym rogu przycisk „Test Connection”. Jeżeli wszystko przebiegło prawidłowo powinniśmy ujrzeć okno, zawierające stosowny komunikat. W przeciwnym przypadku prawdopodobnie będzie konieczna zmiana niektórych parametrów połączenia.

Mając zdefiniowane połączenie z bazą danych, najprostszym sposobem, na wyświetlenie danych na stronie internetowej jest proste przeciągnięcie pożądanej tabeli. Ponownie rozwijamy pasek Server Explorera. Następnie otwieramy zdefiniowane wcześniej połączenie. Rozwijamy gałąź o nazwie „Tables” i przeciągamy na formatkę webową interesującą nas tabelę.

Efektem powyższych działań będzie pojawienie się na formatcę pożądanej tabeli oraz obiektu typu SqlDataSource (zostanie on omówiony dokładniej w kolejnych rozdziałach kursu). Tabela którą widzimy na ekranie to w rzeczywistości także obiekt, tym razem klasy GridView. Przy pierwszym przeciągnięciu tabeli automatycznie powinno otworzyć się okno, umożliwiające odpowiednie ustawienie parametrów tego obiektu.

Spróbujmy teraz otworzyć w przeglądarce internetowej stworzoną w ten sposób formatkę. Jeżeli wszystko przebiegło poprawnie, efekt naszej pracy powinien prezentować się następująco:

Ostatnią czynnością, którą proponuje wykonać w ramach tego rozdziału jest obejrzenie pliku *.aspx, zawierającego kod oglądanej formatki. Powinien się on prezentować następująco:

<form id="form1" runat="server">
 
    <div>
 
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID"
 
            DataSourceID="SqlDataSource1" EmptyDataText="There are no data records to display.">
 
            <Columns>
 
                <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" ReadOnly="True" SortExpression="CategoryID" />
 
                <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" />
 
                <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
 
            </Columns>
 
        </asp:GridView>
 
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString1 %>"
 
            DeleteCommand="DELETE FROM [Categories] WHERE [CategoryID] = @original_CategoryID"
 
            InsertCommand="INSERT INTO [Categories] ([CategoryName], [Description]) VALUES (@CategoryName, @Description)"
 
            ProviderName="<%$ ConnectionStrings:NorthwindConnectionString1.ProviderName %>"
 
            SelectCommand="SELECT [CategoryID], [CategoryName], [Description], [Picture] FROM [Categories]"
 
            UpdateCommand="UPDATE [Categories] SET [CategoryName] = @CategoryName, [Description] = @Description WHERE [CategoryID] = @original_CategoryID">
 
            <InsertParameters>
 
                <asp:Parameter Name="CategoryName" Type="String" />
 
                <asp:Parameter Name="Description" Type="String" />
 
            </InsertParameters>
 
            <UpdateParameters>
 
                <asp:Parameter Name="CategoryName" Type="String" />
 
                <asp:Parameter Name="Description" Type="String" />
 
                <asp:Parameter Name="original_CategoryID" Type="Int32" />
 
            </UpdateParameters>
 
            <DeleteParameters>
 
                <asp:Parameter Name="original_CategoryID" Type="Int32" />
 
            </DeleteParameters>
 
        </asp:SqlDataSource>
 
   
 
    </div>
 
    </form>
 
 
 

W powyższym kodzie możemy odnaleźć definicję dwóch, wykorzystywanych przez nas obiektów. Pierwszym z nich jest DataView, o nazwie DataView1. Zauważmy, że w kodzie możemy odnaleźć jawnie zdefiniowane nazwy oraz właściwości poszczególnych kolumn. Obiektem, dostarczającym danych do wyświetlenia jest z kolei SqlDataSource1. W tym momencie powinniśmy zwrócić uwagę na jego następujące właściwości:

1. SelectCommand, DeleteCommand, UpdateCommand oraz InsertCommand. Zawierają kod w języku SQL, wykorzystywany przez obiekt klasy SqlDataSource.
2. ProviderName – definiuje parametry połączenia z bazą danych. Nie jest umieszczony bezpośrednio w pliku *.aspx. Jego właściwą definicję możemy odnaleźć natomiast w dodanym automatycznie do projektu pliku Web.config.

   <connectionStrings>
 
        <add name="NorthwindConnectionString1" connectionString="Data Source=SKYNET;Initial Catalog=Northwind;Integrated Security=True"
 
            providerName="System.Data.SqlClient" />
 
    </connectionStrings>