Bazy danych 2. Wykład 6

Podobne dokumenty
Wykład 12. ADO.NET model bezpołączeniowy

Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy

Wykład 4. Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy. Bazy danych 2

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Pierwsza niedogodność dotyczy strony zarządzaj działami.

z użyciem kontrolek ASP.NET

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

System zarządzania firmą specyfikacja techniczna.

ADO.NET. Obiektowy dostęp do danych. Przygotował Jakub Światły

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Joyce Cox Joan Lambert. Microsoft Access Krok po kroku. Przekład: Jakub Niedźwiedź

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

Tabela wewnętrzna - definicja

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Bazy danych Access KWERENDY

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Oracle11g: Wprowadzenie do SQL

Krzysztof Kadowski. PL-E3579, PL-EA0312,

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0

Wykład 10 Architektura ADO.NET Dostawcy danych Modele dostępu do danych model połączeniowy Model bezpołączeniowy

PHP: bazy danych, SQL, AJAX i JSON

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

Plan. Raport. Tworzenie raportu z kreatora (1/3)

Autor: Joanna Karwowska

Projektowanie aplikacji z bazami danych

Bazy danych. Zenon Gniazdowski WWSI, ITE Andrzej Ptasznik WWSI

Monitoring procesów z wykorzystaniem systemu ADONIS. Krok po kroku

Wprowadzenie (17) Część I. Makra w Excelu - podstawy (23)

Nowe funkcje w programie Forte Finanse i Księgowość

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Curtis D. Frye. Microsoft Excel Krok po kroku. Przekład: Leszek Biolik

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Laboratorium Technologii Informacyjnych. Projektowanie Baz Danych

6. Formularze tabelaryczne, obiekty nawigacji - rozgałęzienia

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Oracle PL/SQL. Paweł Rajba.

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Budowa aplikacji ASP.NET współpracującej z bazą danych do obsługi przesyłania wiadomości

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Wykład 2. Relacyjny model danych

Projektowanie systemów baz danych

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Bazy danych TERMINOLOGIA

Kwerenda. parametryczna, z polem wyliczeniowym, krzyżowa

Kurs programowania aplikacji bazodanowych

Projektowanie aplikacji bazodanowych w.net

Moduł mapowania danych

Bazy danych i usługi sieciowe

Programowanie w MS Visual Studio 2005 z wykorzystaniem MS SQL Server 2005

Moduł mapowania danych

Część I Rozpoczęcie pracy z usługami Reporting Services

Projekt Hurtownia, realizacja skojarzeń dostawców i produktów

Bazy danych - wykład wstępny

Budowa aplikacji ASP.NET współpracującej z bazą danych do obsługi przesyłania wiadomości

Definicja bazy danych TECHNOLOGIE BAZ DANYCH. System zarządzania bazą danych (SZBD) Oczekiwania wobec SZBD. Oczekiwania wobec SZBD c.d.

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 5.0

Baza danych sql. 1. Wprowadzenie

1 Instalowanie i uaktualnianie serwera SQL Server

WPROWADZENIE DO BAZ DANYCH

Narzędzia 4. dr inż. Tadeusz Jeleniewski

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Usługi analityczne budowa kostki analitycznej Część pierwsza.

Import danych z plików Excel. (pracownicy, limity urlopowe i inne)

PL B1. ABB Sp. z o.o.,warszawa,pl BUP 26/01. Michał Orkisz,Kraków,PL Mirosław Bistroń,Jarosław,PL

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Bazodanowe usługi sieciowe w technologii ASP.NET. dr inż. Tomasz Tatoń

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Przewodnik Szybki start

Warsztaty prowadzone są w oparciu o oficjalne wytyczne firmy Microsoft i pokrywają się z wymaganiami

Programowanie obiektowe

Pojęcie bazy danych. Funkcje i możliwości.

Nowe funkcje w programie Symfonia Finanse i Księgowość

Zdalna edycja i przeglądanie dokumentacji medycznej.

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

TEMAT ĆWICZENIA Zapoznanie z technologią LINQ

BAZY DANYCH. Co to jest baza danych. Przykłady baz danych. Z czego składa się baza danych. Rodzaje baz danych

Podstawy technologii WWW

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

GS2TelCOMM. Rozszerzenie do TelCOMM 2.0. Opracował: Michał Siatkowski Zatwierdził: IMIĘ I NAZWISKO

Program Rejestr zużytych materiałów. Instrukcja obsługi

Budowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych

Systemy GIS Tworzenie zapytań w bazach danych

Transkrypt:

Wykład 6 ADO model bezpołączeniowy Klasa DataSet kolekcja DataTable Obiekty DataColumn Obiekty DataRow Aktualizacja bazy za pomocą obiektu DataAdapter Definiowanie powiązań między tabelami w obiekcie DataSet Wiązanie komponentów z danymi Wiele formularzy aplikacji Model połączeniowy czy bezpołączeniowy? 1

ADO.NET model bezpołączeniowy Model bezpołączeniowy wykorzystuje obiekt DataSet jako pamięć podręczną. Obiekt DataAdapter służy jako pośrednik pomiędzy obiektem DataSet a źródłem danych, z którego pochodzą dane w pamięci. Po załadowaniu danych DataAdapter zwraca obiekt połączenia do puli, odłączając w ten sposób dane od źródła danych. DataAdapter jest klasą osłonową wokół obiektów DataReader dostawców, które wykonują rzeczywiste ładowanie danych. 2

3

Klasa DataSet Obiekt klasy DataSet pełni rolę bazy danych w pamięci. Jego właściwość Tables udostępnia kolekcję obiektów DataTables, które zawierają dane i opisujące je szablony. Właściwość Relations zwraca kolekcję obiektów DataRelation, które definiują powiązania między tabelami. Metody Copy(), Merge() i Clear() klasy DataSet odpowiadają za kopiowanie, scalanie i usuwanie zawartości obiektów tej klasy. DataSet i DataTable to podstawowe elementy architektury ADO.NET i w przeciwieństwie do klas Connection, DataReader i DataAdapter nie są powiązane z konkretnym dostawcą danych. 4

Aplikacja może tworzyć, definiować i zapełniać obiekty DataSet pochodzące z dowolnego źródła danych. Hierarchia klasy DataSet 5

Klasa PropertyCollection jest zbiorem niestandardowych właściwości przechowywanych i udostępnianych jako wartość właściwości DataSet.ExtendedProperties. Obiekty tej klasy służą do przechowywania oznaczeń czasowych lub opisowych informacji, na przykład wymagań dotyczących sprawdzania poprawności kolumn w tabelach zbioru danych. Kolekcja DataTable Kolekcja obiektów DataTable (klasa DataTableCollection) jest dostępna za pośrednictwem właściwości DataSet.Tables. Obiekty tej klasy przechowują dane w formacie wiersz - kolumna (analogicznie jak tabele relacyjnych baz danych). Dzięki swoim właściwościom i metodom może stanowić samodzielne źródło danych lub część kolekcji tabel w obiekcie DataSet. Najważniejsze właściwości tej klasy Columns i Rows definiują układ i zawartość tabeli. 6

Obiekty DataColumn Właściwość DataTable.Columns udostępnia kolekcję obiektów DataColumn, które reprezentują wszystkie pola danych obiektu DataTable. Właściwości kolumn zebrane razem tworzą szablon danych tabeli. Właściwość ColumnName DataType MaxLength AllowDBNull ReadOnly Unique Expression Caption DataTable Opis Nazwa kolumny Typ danych przechowywanych w kolumnie Przykład: col1.datatype = System.Type.GetType("System.String") Maksymalna długość kolumny tekstowej (-1 jeżeli maksymalna długość jest nieokreślona) Określa, czy kolumna może zawierać wartości NULL Określa czy można modyfikować zawartość kolumny Określa, czy kolumna musi zawierać unikalne wartości Wyrażenie definiujące sposób obliczania wartości kolumny Przykład: colvat.expression = colnetto*0.22 Nagłówek wyświetlany w interfejsie użytkownika Nazwa obiektu DataTable zawierającego daną kolumnę 7

Kolumny obiektu DataTable powstają automatycznie w czasie zapełniania tabeli wynikami zapytania do bazy danych lub w wyniku odczytu danych z pliku XML. W przypadku kiedy aplikacja zapełnia tabele dynamicznie (na podstawie danych podawanych przez użytkownika lub pobieranych w czasie rzeczywistym), konieczne może być napisanie kodu definiującego strukturę tabeli. Przykład przedstawia fragment kodu, który tworzy obiekt DataTable, obiekty DataColumn, przypisuje wartości do kolumn, a następnie dodaje te kolumny do obiektu DataTable. Kod zawiera również definicję kolumny wyliczanej. 8

9

10

11

12

13

14

15

16

Obiekty DataRow Dane są dodawane do tabeli po utworzeniu nowego obiektu DataRow, zapełnieniu go danymi w kolumnach i dodawanie go do kolekcji Rows tabeli. Fragment kodu przedstawia przykład umieszczania danych w tabeli utworzonej w poprzednim przykładzie. 17

Klasa DataTable ma metody, które umożliwiają zatwierdzanie i anulowanie zmian danych w tabeli. Obiekty tej klasy przechowują stan każdego wiersza we właściwości DataRow.RowState. Może ona przyjmować jedną z pięciu wartości wyliczenia DataRowState: Added, Deleted, Detached, Modified lub Unchanged. W powyższym przykładzie pokazano, jak ustawiać te wartości. 18

Metody AcceptChanges() i RejectChanges() klasy DataTable to odpowiedniki zatwierdzania i anulowania operacji w bazie danych. Metody te dotyczą wszystkich zmian wprowadzonych od czasu załadowania tabeli lub poprzedniego wywołania metody AcceptChanges(). W pokazanym przykładzie można było przywrócić usunięty wiersz, ponieważ program nie zatwierdził usunięcia przed wywołaniem metody RejectChanges(). Zmiany są wprowadzane w obiekcie DataTable, a nie w oryginalnym źródle danych. Dla każdej kolumny wiersza ADO.NET przechowuje oryginalną i aktualną wartość. Po wywołaniu metody RejectChanges() aktualne wartości są zmieniane na oryginalne wartości. W przypadku wywołania metody AcceptChanges() wartości oryginalne zostają przekształcone na wartości aktualne. Dostęp do dwóch zbiorów wartości (przed i po zatwierdzeniu zmian) można uzyskać za pomocą wartości wyliczeniowych Current i Original właściwości DataRowVersion: 19

Aktualizacja bazy za pomocą obiektu DataAdapter Po zakończeniu ładowania danych przez obiekt DataAdapter, służące do tego połączenie zostaje zamknięte. Zmiany w danych są odzwierciedlane jedynie w obiekcie DataSet, a nie w oryginalnym źródle danych. Aby wprowadzić te zmiany do źródła danych, należy użyć obiektu DataAdapter w celu odtworzenia połączenia i przesłania zmienionych wierszy do oryginalnej bazy danych. Do wykonania tego zadania można użyć tego samego obiektu DataAdapter, który służył do zapełnienia obiektu DataSet. 20

Klasa DataAdapter ma trzy właściwości przypisane do określonych poleceń SQL, które wykonują zadania odpowiadające nazwom tych właściwości. InsertCommand (wstawianie), DeleteCommand (usuwanie), UpdateCommand (aktualizacja). Te polecenia są wykonywane po wywołaniu metody Update()obiektu DataAdapter. Trudność polega na utworzeniu poleceń SQL, które wysyłają zmiany, i przypisaniu ich do odpowiednich właściwości obiektu DataAdapter. Wszyscy dostawcy danych implementują klasę CommandBuilder, której można użyć do automatycznej obsługi tych operacji. 21

22

Obiekt CommandBuilder generuje polecenia niezbędne do aktualizacji źródła danych po wprowadzeniu zmian w obiekcie DataSet. Można utworzyć obiekt klasy CommandBuider, przekazując do konstruktora odpowiedni obiekt DataAdapter. Po wywołaniu metody DataAdapter.Update(), system wygeneruje i wykonana polecenie SQL. Przykłady: DataTable tabela = ds.tables["studenci"]; // (1) Obiektu CommandBuilder używamy do generowania poleceń // aktualizacji SqlCommandBuilder sb = new SqlCommandBuilder(da); // (2) Dodawanie studenta do tabeli DataRow wiersz = tabela.newrow(); wiersz["nazwisko"] = "Koniecpolski"; wiersz["imie"] = "Krzysztof"; wiersz["data_ur ] = "1567-11-23 ; Wiersz["plec ] = "M ; tabela.rows.add(drow); 23

// (3) Usuwanie wiersza z tabeli tabela.rows[4].delete(); // (4) Zmiana wartości kolumny tabela.rows[5]["data_ur"] = "1944"; // (5) Aktualizacja oryginalnej tabeli w bazie źródłowej (na serwerze) int updates = da.update(ds, "studenci"); MessageBox.Show("Zmienione wiersze: " + updates.tostring(); Jest kilka ograniczeń, o których trzeba pamiętać, korzystając z obiektu CommandBuilder. Polecenie Select powiązane z obiektem DataAdapter musi dotyczyć pojedynczej tabeli, a tabela źródłowa w bazie danych musi zawierać klucz główny lub kolumnę zawierającą niepowtarzalne wartości. Ta kolumna (lub kolumny) musi znaleźć się w oryginalnym poleceniu Select. 24

Zastosowanie obiektu DataAdapter upraszcza i automatyzuje proces aktualizacji bazy danych (dowolnego innego magazynu danych). Występują jednak problemy z aktualizacjami wielu użytkowników (współbieżne przetwarzanie transakcji). Model bezpołączeniowy wykorzystuje zasadę optymistycznej równoległości. Wiersze oryginalnego źródła danych nie są blokowane między odczytem a aktualizacją. W czasie tej przerwy inny użytkownik może zaktualizować źródło danych. Metoda Update() rozpoznaje, czy po ostatnim odczycie miały miejsce jakieś zmiany i nie aktualizuje zmienionych wierszy. Są dwie podstawowe techniki radzenia sobie z błędami przetwarzania równoległego, powstającymi przy zatwierdzaniu wielu aktualizacji. anulowanie wszystkich zmian w przypadku naruszenia zasad zatwierdzenie aktualizacji, które nie powodują błędów i wykrycie tych, które powodują, dzięki czemu można je ponownie przetworzyć. 25

Jeśli właściwość DataAdapter.ContinueUpdateOnError ma wartość false, to wówczas, jeżeli aktualizacja wiersza nie jest możliwa, program zgłasza wyjątek. Zapobiega to wprowadzaniu kolejnych aktualizacji, ale nie wpływa na aktualizacje sprzed zgłoszenia wyjątku. Ponieważ aktualizacje mogą zależeć od siebie, aplikacje często wymagają zastosowania techniki "wszystko albo nic". Najłatwiejszy sposób na jej wdrożenie to utworzenie transakcji, w której wykonywane są wszystkie polecenia aktualizacji. W tym celu należy utworzyć obiekt SqlTransaction i przekazać do niego polecenie SqlDataAdapter.SelectCommand, co wiąże to polecenie z transakcją. Jeśli program zgłosi wyjątek, można użyć metody Rollback() do anulowania wszystkich zmian. Jeśli wszystkie operacje się powiodą, program wykona metodę Commit() zatwierdzającą wszystkie polecenia aktualizacji. 26

Przykłady aplikacji z modyfikacją danych w bazie: 27

28

29

30

31

32

33

34

35

36

37

38

Tworzenie połączenia ze źródłową bazą danych i wiązanie kontrolek z danymi - przykład: 39

40

41

42

43

44

Plik app.config -zawiera łańcuch połączeniowy; notacja XML <?xml version="1.0" encoding="utf-8"?> <configuration> <configsections> </configsections> <connectionstrings> <add name="łańcuch_połaczeniowy.properties.settings.baza_dyplomyconnectionstring" connectionstring="data Source=TEJOT0\MSSQLSERV_2016;Initial Catalog=Baza_dyplomy;Integrated Security=True" providername="system.data.sqlclient" /> </connectionstrings> <startup> <supportedruntime version="v4.0" sku=".netframework,version=v4.5.2" /> </startup> </configuration> 45

46

47

48

49

50

51

Wiele formularzy aplikacji 52

53

54

55

56

Plik app.config -zawiera łańcuchy połączeniowe z dwoma różnymi bazami 57

58

59

60

61

62

63

64

65

66

Model połączeniowy czy bezpołączeniowy? Klasa DataReader pozwala na dostęp sekwencyjny w trybie tylko do odczytu. Przetwarzanie po jednym wierszu minimalizuje wymagania związane z pamięcią. Klasa DataSet umożliwia dostęp do danych do odczytu i do zapisu, ale wymaga wystarczającej ilości pamięci, aby pomieścić kopię danych pobranych ze źródła danych. Jeśli aplikacja nie wymaga aktualizowania źródła danych i służy jedynie do wyświetlania i wyboru danych, lepiej zastosować klasę DataReader. Jeśli aplikacja ma aktualizować dane, należy użyć klasy DataSet. Jeśli źródło danych zawiera dużą liczbę rekordów, obiekt DataSet może wymagać zbyt wielu zasobów. Jeśli dane wymagają niewielkiej liczby zmian, lepiej wykorzystać obiekty DataReader i Command do wykonywania aktualizacji. 67

Klasa DataSet stanowi dobry wybór w następujących sytuacjach: Dane są serializowane lub przesyłane przez łącza za pomocą HTTP. Formularz zawiera wiele powiązanych ze źródłem danych kontrolek tylko do odczytu. Kontrolki formularza, jak GridView lub DataView, są powiązane ze źródłem danych, które można aktualizować. Aplikacja musi zmieniać, dodawać lub usuwać wiersze danych. Klasę DataReader lepiej stosować wtedy gdy: - Potrzebna jest obsługa dużej liczby rekordów, przez co wymagania związane z pamięcią i długi czas ładowania powodują, że klasa DataSet jest nieprzydatna. - Dane są tylko do odczytu i są powiązane z kontrolką listy formularza Windows lub Web. - Baza danych podlega częstym zmianom, przez co zawartość obiektu DataSet wymagałaby częstych aktualizacji. 68