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



Podobne dokumenty
Tablice, DataGridView

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Visual Basic.NET ASP.NET + Microsoft SQL Server

PHP: bazy danych, SQL, AJAX i JSON

Autor: Joanna Karwowska

Materiały do laboratorium MS ACCESS BASIC

DataGridView. Aby dodawać kolumny wybieramy z listy zadań Add Column..., co wywoła okno dodawania kolumn, rys. 2. Rysunek 1

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

Dostęp do baz danych w ASP.NET.

Praca z bazą danych. Rysunek 1. Projekt tabeli UZYTKOWNIK bazy KURSY

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Język SQL, zajęcia nr 1

Leszek Stasiak Zastosowanie technologii LINQ w

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

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

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

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

TEMAT ĆWICZENIA Zapoznanie z technologią LINQ

SQL (ang. Structured Query Language)

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Materiały pomocnicze do zajęć z przedmiotu Projekt ADP

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

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

Struktura drzewa w MySQL. Michał Tyszczenko

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

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

WTYCZKA FARA-TCM Dane techniczne dla twórców zewnętrznych aplikacji do obsługi map cmentarza

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Wprowadzenie do Doctrine ORM

Podstawy technologii WWW

Wykład 8. SQL praca z tabelami 5

Laboratorium 7 Blog: dodawanie i edycja wpisów

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

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

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

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

Wykład 5. SQL praca z tabelami 2

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Zaawansowane aplikacje internetowe - laboratorium

Symfonia Produkcja. Kreator raportów. Wersja 2013

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

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

Baza danych sql. 1. Wprowadzenie

Oracle PL/SQL. Paweł Rajba.

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Biuletyn informacyjny WeriOn. 3/2015 Instrukcja konfiguracji połączenia z programem Subiekt GT r.

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

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

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

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Bazy Danych i Usługi Sieciowe

Praca w środowisku Visual Studio 2008, Visual C

Imię i Nazwisko Data Ocena. Laboratorium 7

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

Instrukcja laboratoryjna nr.4

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

15. Funkcje i procedury składowane PL/SQL

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

Ref. 7 - Język SQL - polecenia DDL i DML

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

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

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

Systemy baz danych 2 laboratorium Projekt zaliczeniowy

Ćwiczenie 7 Komponent IBQuery - uruchamianie zapytań aktualizujących. 1. Przygotować w nowym katalogu aplikację do aktualizacji bazy SKOKI.GDB.

Bazy danych. Polecenia SQL

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

PCSHEMATIC AUTOMATION Instalacja aktualizacji baz aparatury

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Aplikacje WWW - laboratorium

Dodawanie operacji dodatkowych w WAPRO Mag.

Programowanie w języku Java. Bazy danych SQLite w Javie

Bazy danych i usługi sieciowe

IIIIIIIIIIIIIIIMMIMMIII

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Ćwiczenie zapytań języka bazy danych PostgreSQL

PRZYGOTOWANIE HARMONOGRAMU WEWNĘTRZNEGO EGZAMINÓW PISEMNYCH W OŚRODKU.

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

PL/SQL. Zaawansowane tematy PL/SQL

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

Instrukcja użytkownika programu QImport (wydanie II r.)

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

KASK by CTI. Instrukcja

Ćwiczenie VB3.4 Struktura Try...Catch, obiekt Err, metoda Err.Raise (Strukturalna obsługa wyjątków)

Janusz Górczyński. Wprowadzenie do programowania baz danych w VB.NET

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Transkrypt:

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013 Prowadzący: mgr inż. Tomasz Jaworski Strona WWW: http://tjaworski.kis.p.lodz.pl/ Visual Basic.NET dostęp do bazy danych Baza Microsoft SQL Server Compact Serwer SQL Compact jest sterownikiem operującym bazie danych, przechowywanej w jednym pliku na dysku, najczęściej o rozszerzeniu.sdf. Zaletą tego serwera jest jego mobilność (przenoszalność) razem z programem użytkownika oraz podstawowy zbiór języka SQL. Wielkość silnika bazy danych to ok. 2MB. Na potrzeby tego laboratorium należy pobrać plik danych z poniższego adresu: http://tjaworski.kis.p.lodz.pl/net/zrodla/baza_sqlce.sdf Uwaga: W przypadku pracy z systemem 64-bitowym należy zainstalować wersję SQL Server Compact 3.5 SP1 x64. Aktualizacja ta widnieje pod nazwą Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop lub skorzystać z adresu: http://www.microsoft.com/downloads/en/details.aspx?familyid=dc614aee-7e1c- 4881-9c32-3a6ce53384d9&displaylang=en Sam serwer (x86) można pobrać z adresu: http://www.microsoft.com/downloads/en/details.aspx?familyid=7849b34f-67ab-481fa5a5-4990597b0297 Łączenie z bazą danych 1. Należy dodać przestrzenie nazw. Nie jest to konieczne, ale ułatwia pisanie kodu i poprawia czytelność. Imports System.Data Imports System.Data.SqlServerCe Imports System.Data.Common Przydadzą się również zmienne, dostępne dla wszystkich metod klasy formularza pola klasy Form1: Dim sql_conn As SqlCeConnection Dim sql_cmd As SqlCeCommand Dim sql_adapter As SqlCeDataAdapter Dim tabela As DataTable SqlCeConnection jest klasą obsługującą połączenie z bazą danych, SqlCeCommand obsługuje zapytania danych, przesyłane do bazy SqlCeDataAdapter umożliwia pobranie wyników zapytania, jednak nie we wszystkich przypadkach klasa ta jest konieczna 1

2. Utworzyć tekst konfigurujący połączenie, tzw. Connection String oraz obiekt reprezentujący połączenie z bazą SQL: Dim conn_str = "Data Source=e:\bazy\baza_sqlce.sdf" sql_conn = New SqlCeConnection(conn_str) 3. Połączenie w utworzonym obiekcie sql_conn należy otworzyć. Dobrą praktyką jest umieszczanie wszystkich operacji komunikacji z bazą danych w bloku Try Catch, ze względu na łatwość obsługi wyjątków bez niepotrzebnego zgadywania co mogło pójść nie tak. Try sql_conn.open() Catch ex As Exception MessageBox.Show("Wyjątek: " + ex.message) End Try 4. Jeśli połączenie z bazą danych zostało pomyślnie utworzone, można pierwsze zapytanie. Będzie to pobranie informacji o liczbie rekordów w tabeli osoby. Dim cmd = sql_conn.createcommand() cmd.commandtext = "SELECT COUNT(id) FROM osoby" Dim ile As Integer = cmd.executescalar() Powyższy kod tworzy obiekt nowego polecenia (zapytania) do bazy danych cmd, ustawia treść zapytania (pole CommandText) oraz wykonuje je. Wynikiem jest wartość skalarna (ExecuteScalar), której wartość zostanie zapisana w zmiennej całkowitej ile. Oprócz metody ExecuteScalar istnieje jeszcze ExecuteNonQuery. Wykorzystuje się ją do zapytań nie zwracających wyników w postaci tabelarycznej. Przykładami takich zapytań jest UPDATE, DELETE, INSERT. Przykład użycia: Dim cmd = sql_conn.createcommand() cmd.commandtext = "DELETE FROM osoby WHERE id = 24" Dim ile = cmd.executenonquery() Kod ten spowoduje usunięcie wiersza, którego pole id jest równe 24. Metoda ExecuteNonQuery zwraca ilość przetworzonych rekordów, więc zakładając, że kolumna id zawiera dane unikalne (identyfikator osoby), to ile może przyjąć wartość 1 (jeden rekord usunięty) lub 0 (nie ma rekordu o numerze 24). Pobieranie danych zapytaniem SELECT Zapytanie SELECT jest najczęściej wykorzystywanym typem zapytania SQL serwerów baz danych. Służy ono do pobierania danych w różnej konfiguracji kolumn oraz po ewentualnych przeliczeniach. Zapytanie SELECT można wykonać poniższym kodem: Dim dt = New DataTable() Dim adapter As DbDataAdapter = New SqlCeDataAdapter( _ "SELECT id, imie, nazwisko, adres FROM osoby", sql_conn) adapter.fill(dt) W tym momencie obiekt dt (DataTable) zawiera kilka wierszy pobranych z bazy. Najprostszym sposobem wyświetlenia ich w formularzu jest skorzystanie z kontrolki 2

DataGridView. Wystarczy skorzystać z własności DataSource i przypisać tabelę do tej własności: DataGridView1.DataSource = dt Wykorzystanie kontrolek formularza do wyświetlania danych Aby wyświetlać w formularzu dane będące wynikiem zapytania można wykorzystać tabelę (DataTable). Zawsze istnieje możliwość ręcznego wybierania danych z tabeli i wyświetlania ich w poszczególnych kontrolkach, jednak często przydatne jest bardziej zautomatyzowane rozwiązanie. Możliwości takie dają kontrolki posiadające własności: DataSource lub/i DisplayMember, np. DataGridView, ListBox DataBindings, np. TextBox, Label, CheckBox Wykorzystanie powyższego mechanizmu pozwala na automatyczne odświeżanie danych w formularzu oraz uaktualnienie danych w tabeli DataTable (nie w fizycznej tabeli w bazie danych!) przy każdej zmianie zawartości dowolnego pola tej tabeli. Przykładem jest sytuacja, w której na formularzu umieszczona jest kontrolka DataGridView oraz kilka kontrolek Label/TextBox. Wybieranie kolejnych wierszy w kontrolce DataGridView będzie automatycznie odświeżało dane w innych, podłączonych do tej samej tabeli, kontrolkach. Zaleca się, aby taka tabela została zadeklarowana jako pole globalne klasy (dostępne dla wszystkich metod składowych). Przykładem jest pole tabela. Zatem wprowadzony wcześniej kod wypełniający obiekt klasy DataTable będzie miał następującą postać: tabela = New DataTable() sql_adapter = New SqlCeDataAdapter( _ "SELECT id, imie, nazwisko, adres FROM osoby", sql_conn) sql_adapter.fill(tabela) Podłączenie tabeli do kontrolki DataGridView: DataGridView1.DataSource = tabela Podłączenie tabeli do kontrolki Label: Label1.DataBindings.Add("Text", tabela, "imie") Metoda Add ma kilka wersji (przeciążeń). Wersja prezentowana powyżej przewiduje trzy parametry: "Text" nazwa własności kontrolki Label, która ma być uzupełniana danymi z tabeli tabela. W tym przypadku własność Text przechowuje napis wyświetlany na formularzu. Zmiana zawartości tej własności powoduje natychmiastową zmianę tekstu wyświetlanego w oknie. tabela nazwa obiektu źródła danych, czyli po prostu zmienna typu DataTable. "imie" nazwa kolumny w wyniku zapytania wykorzystanego do wygenerowania danych dla tabeli tabela. W przypadku zapytania "SELECT id, imie, nazwisko, adres FROM osoby" dostępne są cztery nazwy kolumn. Podłączenie tabeli do kontrolki TextBox: 3

TextBox1.DataBindings.Add("Text", tabela, "nazwisko") Tutaj idea jest identyczna, jak w przypadku kontrolki Label. Podłączenie tabeli do kontrolki ListBox: ListBox1.DataSource = tabela ListBox1.DisplayMember = "adres" W tym wypadku należy pamiętać, że kontrolka ta jest listą, wyświetlającą dane kolekcji konkretnego typu. W przypadku podłączenia do tabeli DataTable, kolekcją taką będzie jedna z jej kolumn (tutaj adres). Własność DataSource określa źródło danych obiekt tabela, natomiast DisplayMember nazwę kolumny z tabeli tabela. Automatyczna aktualizacja fizycznej bazy danych Mechanizm automatycznej aktualizacji danych formularza działa w jedną stronę. Przesyła dane z bazy danych, do lokalnego magazynu (obiekt tabela klasy DataTable) poprzez konkretne zapytanie. Następnie, poprzez odpowiednie połączenia (DataBindings), do poszczególnych kontrolek formularza. Możliwe jest działanie odwrotne, również mocno zautomatyzowane. Wymaga ono jednak rozwinięcia kodu tworzenia adaptera danych. Natomiast kod podłączający kontrolki formularza do tabeli wyników (tabela) pozostaje bez większych zmian. Punkty 1 oraz 2 z poniższego opisu są jednakowe dla obu mechanizmów pobierania danych z bazy i jej aktualizacji. Aby skorzystać z mechanizmu automatycznej aktualizacji bazy należy: 1. Utworzyć obiekt komend SqlCeCommand poprzez metodę CreateCommand obiektu połączenia. Do pola CommandText obiektu komend należy przypisać zapytanie SELECT, które będzie podstawą wyświetlanych danych. Jedną z kolumn zapytania powinna być kolumna identyfikująca każdy rekord unikalną wartością. W przykładzie jest to kolumna id. sql_cmd = sql_conn.createcommand() sql_cmd.commandtext = "SELECT id, imie, nazwisko, adres FROM osoby" 2. Podobnie jak w poprzednim przykładzie, należy uworzyć adapter danych SqlCeDataAdapter, na bazie utworzonego wcześniej obiektu polecenia zapytania SELECT. sql_adapter = New SqlCeDataAdapter(sql_cmd) 3. Aby możliwe było automatyczne dodawanie nowych rekordów oraz aktualizacja i usuwanie istniejących, konieczne jest utworzenie odpowiednich zapytań języka SQL, realizujących te funkcje dla wykorzystywanego zestawu danych a przechowywanego w tabela. Można wpisać je ręcznie w kod programu, jednak nie zawsze jest to proste. Można zatem posłużyć się kolejnym automatem, reprezentowanym przez klasę SqlCeCommandBuilder. Jego zadaniem jest automatyczne utworzenie zestawu zapytań INSERT/UPDATE/DELETE na podstawie istniejącego adaptera danych, z którym związane jest przygotowane wcześniej zapytanie SELECT. Dim cmd_builder = New SqlCeCommandBuilder(sql_adapter) sql_adapter.insertcommand = cmd_builder.getinsertcommand() sql_adapter.updatecommand = cmd_builder.getupdatecommand() 4

sql_adapter.deletecommand = cmd_builder.getdeletecommand() Poszczególne linie powyższego kodu tworzą trzy szablony zapytań: INSERT, DELETE oraz UPDATE. Poniżej przedstawiono przykładowe wyniki działania tych metod: GetInsertCommand(): "INSERT INTO [osoby] ([imie], [nazwisko], [adres]) VALUES (@p1, @p2, @p3)" GetUpdateCommand(): "UPDATE [osoby] SET [imie] = @p1, [nazwisko] = @p2, [adres] = @p3 WHERE (([id] = @p4) AND ((@p5 = 1 AND [imie] IS NULL) OR ([imie] = @p6)) AND ((@p7 = 1 AND [nazwisko] IS NULL) OR ([nazwisko] = @p8)) AND ((@p9 = 1 AND [adres] IS NULL) OR ([adres] = @p10)))" GetDeleteCommand(): "DELETE FROM [osoby] WHERE (([id] = @p1) AND ((@p2 = 1 AND [imie] IS NULL) OR ([imie] = @p3)) AND ((@p4 = 1 AND [nazwisko] IS NULL) OR ([nazwisko] = @p5)) AND ((@p6 = 1 AND [adres] IS NULL) OR ([adres] = @p7)))" 4. W tej chwili obiekt adaptera, sql_adapter, posiada 4 zapytania: SELECT, INSERT, UPDATE, DELETE. Może on zatem wykonywać powyższe operacje w sposób zautomatyzowany. Aby rozpocząć pracę, należy pobrać dane z bazy (poprzez pośrednie wykonanie zapytania SELECT) poniższym kodem: sql_adapter.fill(tabela) 5. Od tego momentu użytkownik może wykonywać operacje w działającej formie, edytując zawartość istniejących wierszy tabeli tabela, usuwając je lub dodając nowe. Kiedy użytkownik zakończy pracę, będzie chciał zapisać zmiany do bazy. Można to wykonać np. przyciskiem Aktualizuj o następującym kodzie: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Try sql_adapter.update(tabela) Catch ex As Exception MessageBox.Show("Wyjatek podczas aktualizacji: " + ex.message) End Try End Sub Zdarzenie to wywoła metodę Update na rzecz adaptera sql_adapter. Ten z kolei wykona serię zapytań UPDATE/DELETE/INSERT do bazy danych, wykorzystując połączenie sql_conn. Ponieważ użytkownik często potrafi zaskoczyć programistę swoimi możliwościami wpisywania danych pozbawionych sensu, kod aktualizacji bazy powinien być zawsze zabezpieczony blokiem obsługi wyjątków Try...Catch. Zadanie 1 Pobrać bazę danych http://tjaworski.kis.p.lodz.pl/zajecia/net/zrodla/baza_sqlce.sdf, podłączyć ją, a następnie wyświetlić liczbę rekordów w tabeli (podpowiedź: SELECT COUNT(id) FROM osoby. Zadanie 2 W kontrolce typu ListBox wyświetlić osoby z tabeli osoby, przez połączenie kolumny imie i nazwisko, np. Piotr Wysocki. Dodatkowe dwie kontrolki Label powinny wyświetlać zawartości pól adres oraz telefon (pole tel). 5

Zadanie 3 Edycja tabeli osoby za pomocą kontrolki DataGridView. Program powinien posiadać przycisk Zapisz aktualizujący fizyczną bazę danych. (podpowiedź: Kolumna id nie może być widoczna) Zadanie 4 rozszerzenie zadania 3 Do programu dodać pole tekstowe z notatką na temat danej osoby. Treść notatki jest przechowywana w oddzielnej tabeli notatki. Struktura danych dla tego zadania jest następująca: Pole id tabeli notatki zawiera identyfikator osoby (kolumna id tabeli osoby) z którą dana notatka jest związana. 6