Wydział Informatyki i Zarządzaniaą Wyświetlanie informacji z baz danych z użyciem kontrolek ASP.NET Rafał Boborycki Zaawansowane Programowanie Internetowych SI
Plan prezentacji ASP.Net i ADO.Net. Tryby połączeń do baz danych. Drag & Drop. Kontrolki wyświetlające.
ASP.NET i ADO.NET ASP.NET i ADO.NET - połączenie, dające ogromne możliwości podłączania się do baz danych i działania na nich.
ADO.NET Ogólnie technologia.net do łączenia się z ustrukturyzowanymi danymi. Zunifikowany zorientowany obiektwo interfejs dla różnych źródeł danych: Relacyjnych baz danych Plików XML Innych źródeł danych Przystosowany do aplikacji webowych. Dostarcza 2 tryby łączenia się z danymi: Połączeniowy Bezpołączeniowy
Idea uniwersalnego łączenia się z danymi Jest to swoiste połączenie zorientowanych obiektowo języków programowania i relacyjnych baz danych. Zunifikowany model programowania oraz API. Implementacje dla różnych źródeł danych (dostawców). MsSql Aplikacja API DB2 Oracle dostawcy OD DBC?
Klasy i źródła danych Asemblat: - System.Data.dll Namespace: -System.Data -System.Data.Common -System.Data.SqlTypes Microsoft SQL Server 7.0 Oracle 8.1.6 SqlXml support in SQL Server ODBC data source OleDb data source System.Data.SqlClient System.Data.OracleClient System.Data.SqlXml System.Data.ODBC System.Data.OleDb
Tryb połączeniowy Podstawowe elementy: DbConnection DbCommand DbTransaction DataReader
Przykładowe podłączenie się do bazy danych SqlConnection testconnection = new SqlConnection( "Server=(local);Database=Test;Integrated Security=SSPI"); try { testconnection.open(); if (testconnection.state == ConnectionState.Open) { kod } }catch (Exception) { obsluga błedów } finally { if (testconnection.state == ConnectionState.Open) { testconnection.close(); } testconnection.dispose(); }
DbCommand i DataReader Do wykonywania komand: SqlCommand testcommand = testconnection.createcommand(); testcommand.commandtext = "SELECT * FROM TestDemo"; DataReader ma odczytywać dane: SqlDataReader sqldr = testcommand.executereader();
Tryb bezpołączeniowy Używany w przypadku wielu równoległych i długo trwałych połączeń. Także kiedy używanie trybu połączeniowego jest zbyt kosztowne. Co otrzymujemy: Dane są przechowywane w pamięci głównej. Tylko krótkotrwałe połączenia do odczytu i zmian (DataAdapter). Dane w pamięci są niezależne od danych w bazie danych (możliwe konflikty).
DataSet DataSet.Tables[...] DataTable.Columns[..].Columns[...] schema DataColumn DataColumn.Rows[..].Rows[...] DataRow DataRow data.relations[...]....defaultview... DataRelation DataView
DataSet - diagram klas
DataSet - dodawanie wierszy (przykład) Wiersze są reprezentowane przez DataRow i je też wykorzystujemy do dodawania kolejnych wierszy(encji). j) Przykład: DataRow row = datatable.newrow(); row[0] = Gucio ; lub row[ Imie ] = Gucio ; datatable.rows.add(row); dataset.acceptchanges();
DataAdapter DataAdapter jest używany do podłączania się do bazy danych. Posiada dwie główne funkcje: Fill(DataSet, Nazwa tabeli ); - pobiera tabele z bazy i zapisuje ją do DataSet Update(DataSet, Nazwa tabeli ); - aktualizuje tabelę w bazie danych Może wykonywać y komendy: Select Insert Delete Update
DataAdapter dziedziczenie
DataAdapter (przykład) protected void Page_Load(object sender, EventArgs e) { string connectionstring = "Data Source=ENIAC;Initial Catalog=catDB;Integrated Security=True"; string commandstring = "SELECT * FROM Kocury"; SqlDataAdapter dataadapter = new SqlDataAdapter(commandString, connectionstring); DataSet dataset = new DataSet(); dataadapter.fill(dataset, "Kocury"); DataTable datatable = dataset.tables["kocury"]; }
Tryb połączeniowy a bezpołączeniowy Tryb połączeniowy: Połączenie zawsze aktywne Dane zawsze aktualne Dla aplikacji o krótkich transakcjach i kilku równoległych połączeniach Tryb bezpołączeniowy: Brak stałego połączenia z bazą danych Dane zapisywane w pamięci głównej Możliwy konflikt danych pomiędzy bazą danych a danymi lokalnymi Dla aplikacji o wielu równoległych i długo trwałych połączeniach
Jak to zrobić prościej, czyli drag & drop Dodajemy nowe połączenie i uzupełniamy dane: W ten sposób uzyskujemy połączenie z bazą danych.
Drag & drop cd. Potrzebujemy obiektu, który będzie pobierał dane z bazy
Wybór danych do pobrania
Kontrolki prezentacji danych Po dodaniu obiektu GridView należy mu przekazać skąd ma pobierać dane. Obok widok z przeglądarki. gą W ten sposób uzyskujemy podłączenie do istniejącej bazy danych.
Kontrolki prezentacji danych Przedstawionych zostanie pięć kontrolek, które służą do prezentacji danych pobieranych z bazy danych w sposób opisany wcześniej. GridView DetailsView FormView Repeater DataList Wszystkie kontrolki znajdują się w zakładce ToolBox w części Data.
GridView
GridView Praktycznie najczęściej używana kontrolka, posiadająca zarazem szeroki wachlarz zastosowań. Poza wyświetlaniem w postaci zwykłej tabeli są ą to: Edycja Usuwanie Sortowanie Stronnicowanie poprzez wiele różnych źródeł danych różnych typów.
GridView Połączenie z danymi można zapewnić na dwa sposoby: 1. Starszy sposób poprzez związanie pośrdnio z DataSet a bezpośrednio z DataTable. Zmusza nas to do pisania samemu kodu do sortownia, stronicowania, czy edycji. mygridview.datasource = datatable; 2. Nowy sposób poprzez wiązanie do właściwości DataSourceID obiektów implementujących interfejs IDataSource np. SqlDataSource. Kontrolka GridView przejmuje wtedy defakto kontrolę nad danymi i umożliwia automatycznie sortowanie, stronnicowanie, edycje i usuwanie.
Metody GridView Aby opcje do: stronnicowania edycji usuwania były dostępne, źródło danych musi pozwalać na takie działanie, aby GridView samemu mógł przejąć kontrolę nad tymi zadaniami. W praktyce sprowadza się to do tego, że ten obiekt musi implementować interfejs IDataSource.
Kolumny w GridView Kolumn w GridView mogą być następujących typów: BoundField zwykłe pole związane z źródłem danych HyperLinkField dodaj hiperlink do kolumny/pola ButtonField dodaje przycisk, Event.CommandArgument = index CommandField Edit, Upadate, Cancel Select Delete ImageField wyświetla zdjęcie, wymagane DataImageURLField CheckBoxField może wyświetlać wartości bool-owskie owskie TemplateField umożliwia samemu definiowanie kolumn
DetailsView
DetailsView Wyświetla pojedyńczy rekord ze źródła danych jako tabelę, gdzie każdy wiersz odpwiada jednemu polu z tej kolumny. Posiada te same kolumny co GridView oraz te same ograniczenia dotyczące łączenia ze źródłem danych. Używany zamiennie z GridView do obsłużenia specyficznych wymagań dotyczących wyświetlania.
FormView
FormView Wyświetla pojedyńczy rekord ze źródła danych używając zdefiniowanego przez szablonu. Definiowanie własnych szablonów daje nam możliwość większej kontroli nad wyświetlaniem danych. Pozwala na edycję, usuwanie i dodawanie rekordów. Należy stworzyć szablon odpowiadający konfiguracji kontrolki. A do wyboru są: EditItemTemplate EmptyDataTemplate FooterTemplate HeaderTemplate ItemTemplate InsertItemTemplate PagerTemplate
Repeater Kontrolka listy pozwalająca na wyświetlanie danych poprzez powtarzanie odpowiedniego szablonu na każdym obiekcie danej listy. Jest to podstawowy szablon. Nie ma zdefiniowanych żadnego wyglądu ani stylu. Trzeba samemu wszystko zdefiniować w szablonie kontrolki. Minimalnie należy zdefiniować szablon ItemTemplate. Repeater jako jedyna kontrolka pozwala na dzielenie znaczników pomiędzy szablony. Np. <table> jest w HeaderTemplate a </table> w FooterTemplate. Nie posiada wbudowanych możliwości selekcji ani edycji. Można użyć event-u ItemCommand do obsługi zdażeń. Uwaga! Microsoft ostrzega, że można wykorzystać tą kontrolkę do wyświetlania danych wprowadzanych przez użytkownika, a tam może być złośliwy kod.
DataList
DataList Kontrolka listy umożliwiająca wyświetlanie obiektów używając szablonów. Zapewnia możliwość wyboru i edycji obiektów. Sposobem wyświetlania manipuluje się używając szablonów: AlternatingItemTemplate EditItemTemplate FooterTemplate HeaderTemplate ItemTemplate - wymagany SelectedItemTemplate SeparatorTemplate Uwaga! Także należy uważać na złośliwy kod.
Literatura [1] Programowanie ASP.NET, Jesse Liberty, Dan Hurwitz O Reilly [2] Microsoft Developer Network http://msdn.microsoft.com [3] Język C# i platforma.net, Andrew Troelsen Apress [4] Portal CodeGuru http://codeguru.pl/
Dziękuję za uwagę.