czwartek, 12 lipca 2012

ASP Wiązanie danych cz. 1

Ponieważ ostatnio zajmuję się ASP.NET postanowiłem napisać parę postów odnośnie wiązania danych. Tak więc lecimy:

ASP.NET idzie nam na rękę jeśli chodzi o połączenia z bazami danych. Nie trzeba pisać tak dużo zbędnego kodu jak to miało miejsce wcześniej. W tym poście zaprezentuję kontrolkę SqlDataSource która umożliwia uzyskanie dostępu do dowolnego źródła danych (należącego do grupy dostawców ADO.NET). Domyślnie kontrolka ta posiada możliwość współpracy z dostawcami ODBC, OLE DB, SQL Server, Oracle, SQL Server CE.

Zanim przejdziemy do rzeczy, najpierw pobierzmy jakieś dane które będziemy mogli powiązać. Posłużę się tutaj przykładem z książki z której w dalszym ciągu korzystam przy pisaniu stron ASP.NET i zaproponuję pobranie bazy danych Northwind. Jest to przykładowa baza danych dostępna na stronach Microsoftu do ściągnięcia. Dostępna jest pod adresem http://www.microsoft.com/en-us/download/details.aspx?id=23654


Po ściągnięciu instalatora i domyślnej instalacji powinniśmy na dysku C mieć folder SQL Server 2000 Sample Databases a w nim pliki:


Mamy już wszystko co potrzebne. Odpalamy teraz Visual Studio i tworzymy pusty projekt aplikacji ASP.NET:


Do projektu dodajmy nowy element (new item) Web Form


Otwórzmy go i przeciągnijmy do niego kontrolkę SqlDataSource z Toolboxa. Powinna pojawić sie taka linijka:

<asp:sqldatasource id="SqlDataSource1" runat="server"></asp:sqldatasource>

Tworzenie połączenia z bazą danych jest proste dzięki kreatorowi do którego można się dostać gdy mając ustawiony widok Design albo Split klikniemy na:



Pojawi się nowe okno gdzie wystarczy wskazać bazę danych do której chcemy się połączyć:


Jednak może się tak zdarzyć że nie mamy czego tam wybrać. Możemy zatem utworzyć nowe połączenie klikając na przycisk New Connection...

Zakładam że SQL Server jest zainstalowany na komputerze (w moim przypadku instalowany był razem z VisualStudio). Jeśli tak nie jest należy zainstalować SQL Server.

Okno, które nam się pojawiło w moim przypadku należało uzupełnić tak jak na poniższym screenie:


Klikamy OK i powinniśmy mieć do wyboru bazy danych naszego serwera. Jednak jeśli nie ma tam jeszcze NORTHWIND'a dajmy na razie Cancel i przejdźmy do Server Explorera



Kliknijmy prawym przyciskiem myszy na Data Connections a następnie Add Connection. Okno które wyskoczy uzupełniamy identycznie jak 2 screeny wyżej z tym że w sekcji Connect to a database zaznaczamy Attach a database file:. Następnie klikając na Browse wskazujemy nasz plik NORTHWIND.mdf i zatwierdzamy wszystkie okna. Po rozwinięciu Data Connections w Server Explorerze powinna nam się już pokazać nasza baza danych.

Więc wróćmy do okna "Choose Your Data Connection" i wybierzmy Northwinda:


Klikamy Next i widzimy następujące okno:


Tutaj możemy wybrać tabelę z jakiej chcemy wyświetlać dane lub wywołać niestandardowe polecenie SQL. Jeśli zdecydujemy się na wybranie jednej tabeli możemy zaznaczyć potrzebne nam kolumny lub gwiazdkę (tak jak na powyższym screenie) która oznacza wszystkie kolumny. Dodatkowo mamy jeszcze po prawej stronie przyciski WHERE gdzie możemy ustawiać warunki dla naszego zapytania SQL (np żeby wybierał tylko te wartości z tabeli gdzie w jakiejś kolumnie wartośc jest np większa od 5), ORDER BY gdzie ustalamy kolejność wyświetlania znalezionych elementów oraz Advanced gdzie możemy wybrać opcję Generate INSERT, UPDATE, and DELETE statements która pozwoli wygenerować podane instrukcje na podstawie utworzonej instrukcji SELECT.
Kolejna opcja Use optimistic concurrency sprawia że po zaznaczeniu jej, instrukcje UPDATE i DELETE będą tak modyfikowane aby zawierały wartości oryginalne jak i nowe. Dzięki temu, w momencie wykonywania zapytań, dane docelowe będą porównywane z danymi w kontrolce SqlDataSource. Jeśli rekord zmienił się od czasu pobrania go przez kontrolkę to instrukcje UPDATE i DELETE nie zostaną wykonane.

Wybierzmy kilka kolumn i naciśnijmy Next


Możemy sprawdzić wynik wygenerowanego zapytania w następnym oknie przy pomocy przycisku Test Query.


Po kliknięciu na Finish widzimy że nasza kontrolka została nieco zmodyfikowana.

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:NORTHWNDConnectionString %>"
            SelectCommand="SELECT [CustomerID], [ContactName], [CompanyName], [Country] FROM [Customers]"></asp:SqlDataSource>

Na tym zakończę część pierwszą.
Więcej w części drugiej już wkrótce.

6 komentarzy:

  1. Myslalem ze juz nikt tego nie uzywa :)

    OdpowiedzUsuń
  2. @mgbas - czego nie używa?

    ---
    Ogólnie blog zapowiada się bardzo fajnie, gdyż właśnie przez lato chcę trochę posiedzieć przy platformie .NET . Już wiele raz zabierałem się tematu programowania w C#, etc, ale teraz mam zamiar coś podłubać, chociaż trochę (ale więcej niż zawsze :P). Na razie jestem na trochę innym etapie, ale myślę, że niedługo skorzystam z materiałów zawartych na Twoim blogu..

    Pozdrawiam,
    Michał

    OdpowiedzUsuń
  3. SqlDataSource czy LinqDataSource to zło i nie powinno się ich używać. To jest jawne mieszanie warstwy prezentacji i dostępu do danych, a warstwy te powinny być niezależne od siebie.

    OdpowiedzUsuń
  4. Dzięki za komentarz. Jestem właśnie w trakcie nauki ASP.NET i staram się opisywać wszystko czego się nauczyłem w jak najlepszy sposób. Nie pomyślałem o tym że warstwy prezentacji i danych są mieszane w tym momencie ale masz rację. Podziękować można tylko książce "ASP.NET 4 z wykorzystaniem C# i VB" którą opisałem (z resztą negatywnie) na stronie "Moje książki" ;/

    OdpowiedzUsuń
  5. @Michał Małecki - WebForms i obsługi danych w przedstawiony sposób- Głównie z powodów o których pisze @lszk.

    @Tomasz Sikora - odrazu zacznij z MVC - zapomnij o WebForms. Z WebForms możesz jedynie nauczyć się złych nawyków i zapomnieć że pracujesz z Http. Chyba najlepsze tutki (nie potrzebujesz książki) znajdziesz w screencastach Scotta Hanselmana.

    OdpowiedzUsuń