Kompendium programisty vb



Pobieranie 1,48 Mb.
Strona1/11
Data14.11.2017
Rozmiar1,48 Mb.
  1   2   3   4   5   6   7   8   9   10   11

Kompendium wiedzy programisty VB.NET – nr 5 autor: Janusz Białowąs



Kompendium programisty VB.NET - nr 5


Bazy danych, odtwarzacze plików dźwiękowych, algorytmy wyszukiwania wzorca w tekście … chyba starczy na jeden numer.

Bazy danych to nie tylko ACCESS, to także systemy oparte na serwerach SQL. Prosta aplikacja wykorzystująca darmową wersję serwera firmy Microsoft –MSDE, to ciekawa propozycja rozpoczęcia pracy z profesjonalnymi systemami bazodanowymi. Dla amatorów multimediów (o)krągły odtwarzacz plików WAV. W każdym numerze kompendium nie może zbraknąć algorytmiki- dziś Knuth, Morris, Pratt, Boyer, Mooore oraz Naiwny- znacie ich ?


Obsługa baz danych w VS.NET

MSDE

MSDE 2000 to darmowa edycja bazy danych mająca zgodność z komercyjnym produktem firmy Microsoft SQL Server 2000. Wykorzystuje tę samą odmianę dialektu języka SQL - T-SQL. Zastosowanie MSDE to nie tylko wersje testowe dużych aplikacji bazodanowych opartych na serwerze SQL, lecz także główny sposób przechowywania danych w mniejszych aplikacjach opartych na bazie SQL. Zaletą tego systemu jest możliwość łatwej i bezproblemowej migracji danych do systemu serwerowego (Microsoft SQL Server 2000) w przypadku, gdy baza się rozrośnie i wymaga większej skalowalności.

Zaletą MSDE jest jego dostępność z wieloma produktami firmy Microsoft, co znacznie ułatwia rozpowszechnianie aplikacji opartych na tym silniku baz danych. Posiadacze pakietu Office XP Professional mogą wykorzystywać aparat MSDE jako alternatywne narzędzie do przechowywania baz danych w stosunku do Microsoft Jet (silnik baz danych, na którym jest oparty system ACCESS). Komercyjnie MDSE mogą wykorzystywać w swoim oprogramowaniu posiadacze następujących produktów:

- MSDN Universal. Enterprise i Professional

- Microsoft Office XP Developer

- SQL Server Developer, Standard, Enterprise

- Microsoft Visual Studio.NET Architect, Developer, Professional
SQL Server 2000 Desktop Engine (MSDE) - jest w 100% kompatybilny z pełną komercyjną wersją serwera. Pisząc programy do MSDE pisze się je w ten sam sposób jak dla wersji SQL Server. Jako wersja darmowa MSDE posiada pewne ograniczenia. Podstawowym jest górna granica wielkości bazy danych. Maksymalny łączny rozmiar pików mdf i ldf nie może przekroczyć 2 GB. Liczba baz nie jest ograniczona w stosunku do SQL serwera i możne wynosić maksymalnie 32 767. Drugim ograniczeniem jest limit jednocześnie przetwarzanych zapytań. Dokumentacja firmy Microsoft podaje, iż po przekroczeniu 5 jednoczesnych zapytań wydajność motoru bazy spada, w wyniku dokładania przez MSDE dodatkowych „pustych” operacji. Wynika stąd wniosek o mniejszej użyteczność tego narzędzia
w wypadku obsługi większej liczby użytkowników. Dodatkowo należy pamiętać, iż MSDE jest przeznaczony głównie do przechowywania danych, stąd też jest pozbawiony narzędzi do zarządzania danymi. Standardowo można dokonywać operacji na danych oraz uprawnieniach za pomocą dostarczanego z MSDE narzędzia osql, pracującego w trybie konsolowym. MSDE pracujący na stacji roboczej jest aplikacją w małym stopniu absorbującą pamięć komputera, ponieważ została zaprogramowana jako program działający w tle. Pełna wersja SQL Server wymaga znacznie większych zasobów systemowych.

Klasy VS.NET do obsługi i komunikacji z różnymi bazami danych

VS.NET udostępnia wiele wbudowanych klas pozwalających na komunikację i obsługę baz danych. Niektóre tych z klas są specyficzne dla dostawcy (klasy dostawców), tzn. stanowią interfejs dla określonego typu systemu bazodanowego. Zadaniem ich jest połączenie z bazą danych, wykonywanie poleceń i odczytywanie danych. VS.NET wspomaga cztery odmiany dostawców baz danych: Microsoft SQL Server, OLE DB, ODBC oraz Oracle. W naszym kompendium omówimy współpracę z MS SQL Server. Należy pamiętać, że praca z innymi dostawcami będzie bardzo podobna, np. dla programistów wykorzystujących silnik Microsoft JET (czyli dane są zapisane w pliku ACCESS-a) przeznaczone będą klasy wspierające OLE DB zorganizowane w ten sam sposób co klasy SQL. Należy pamiętać, że wszystkie klasy wspomagające pracę z bazami danych znajdują się w przestrzeni nazw System.Data.

Najważniejsze klasy dostawców w .NET to: Connection, Command, DataReader oraz DataAdapter. Ze względu na dostawców umieszczone są one w odpowiednich przestrzeniach nazw, np. SQLClient i OLEDB oraz zostały odpowiednio nazwane, np. SQLCommand.


Klasa dostawcy

Przestrzeń nazw SQLClient

Przestrzeń nazw OleDb

Connection

SQLConection

OleDbConnection

Command

SQLCommand

OleDbCommand

DataReader

SQLDataReader

OleDbDataReader

DataAdapter

SQLDataAdapter

OleDbDataAdapter

Klasa Connection powala nawiązać lub zakończyć połączenie z bazą danych. Do wykonania tej operacji jest potrzebny tzw. łańcuch połączeniowy (ConnectionString), czyli tekst zawierający najważniejsze informacje, pozwalające na połączenie z wybraną bazą danych udostępnioną przez wskazanego dostawcę. Łańcuch połączeniowy zawiera informacje w postaci par – klucz-wartość, specyficznych dla serwera baz danych, systemu zabezpieczeń. Przykładowe łańcuchy połączeń:

- dla bazy obsługiwanej przez system SQL, gdzie system zabezpieczeń jest monitorowany przez serwer SQL (uwierzytelnianie SQL): Password=ala;Persist Security Info=True;User ID=sa;Initial Catalog=ksiazaki;Data Source=STACJA18

- dla bazy opartej na systemie Access (dostawca OleDb): Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Janusz\Moje dokumenty\AS.mdb;Persist Security Info=False



Łańcuch połączeniowy można uzyskać w następujący sposób:


  1. Otwieramy w dowolnym miejscu (np. na pulpicie) nowy plik o dowolnej nazwie i rozszerzeniu UDL, np. Nowy.UDL.

  1. Otwieramy utworzony plik poprzez dwukrotne kliknięcie na nim. Pojawi się okno Właściwości łącza danych widoczne poniżej. Z listy Dostawcy OLE DB wybieramy dostawcę danych, od którego pochodzi nasza baza danych, np. Microsoft Ole DB Provider for SQL Serwer (jest to wybór SQL Servera lub silnika bazy MSDE).



  1. Przechodzimy na kartę Połączenie. Wybieramy nazwę serwera, sposób uwierzytelniania oraz bazę na serwerze. Sprawdzamy, czy jest połączenie z bazą, wciskając przycisk Testuj połączenie. W przypadku pozytywnej odpowiedzi można zamknąć okno, klikając przycisk OK.



  1. Otwieramy za pomocą Notatnika plik UDL. Tekst od słowa Provider zawiera łańcuch połączeniowy potrzebny do nawiązania połączenia z bazą ksiazki.

W przypadku, gdy wykorzystujemy MS SQL Server lub MSDE w łańcuchu połączeniowym pomijamy klucz Provider.
Połączenie z bazą polega na utworzeniu nowego obiektu klasy System.Data.SqlClient.SqlConnection zainicjowanego łańcuchem połączeniowym, a następnie wywołaniu metody Open dla tego obiektu, np.:
Dim strPolacz As String

strPolacz = "Password=ala;Persist Security Info=True;User ID=sa;Initial Catalog=ksiazaki;Data Source=STACJA18"

objPolaczenie = New System.Data.SqlClient.SqlConnection(strPolacz)

objPolaczenie.Open()


Zamkniecie połączenia z bazą polega na wywołaniu metody Close, np.:
objPolaczenie.Close()
W trakcie działania aplikacji można sprawdzić, czy jest połączenie, wywołując właściwość State, np.:
If objPolaczenie.State = ConnectionState.Open Then

objPolaczenie.Close()

End If
Fragment kodu powyżej sprawdza, czy połączenie z bazą jest otwarte; w przypadku pozytywnej odpowiedzi zamyka zbędne już połączenie (należy pamiętać, że próba zamknięcia połączenia, gdy zostało ono już wcześniej zakończone, spowoduje wystąpienie wyjątku).
Klasa Command pozwala wykonywać instrukcje SQL wraz z parametrami. Wykorzystujemy ją w celu, np. utworzenia bazy, tabeli, wpisu lub aktualizacji danych, wyszukania informacji
z wykorzystaniem języka SQL. Do wykonania zapytań wykorzystujemy 3 metody ExecuteReader, ExecuteScalar oraz ExecuteNonQuery. Działanie tych metod jest następujące:

- ExecuteReader –zwraca obiekt typu DataReader zawierający, np. zestaw rekordów będący wynikiem zapytania.

- ExecuteScalar – zwraca zawartość pierwszej kolumny z pierwszego wiersza zestawu wyników, otrzymanego w wyniku zapytania.

- ExecuteNonQuery wykonuje instrukcję SQL i zwraca ilość zmodyfikowanych wierszy.


Przykładowe wykorzystanie klasy Command do usunięcia rekordu o wskazanym identyfikatorze może wyglądać następująco:
strSQL = "delete from ksiazki" & " where id_k=3"

Utworzenie zapytania SQL.


Dim objZapytanie As New System.Data.SqlClient.SqlCommand(strSQL, objPolaczenie)

Utworzenie nowego obiektu typu System.Data.SqlClient.SqlCommand (klasa Command dla dostawcy SQL) i zainicjowanie go zapytaniem SQL oraz obiektem klasy Connection (zawierającym informacje o połączeniu z bazą danych).


objZapytanie.ExecuteNonQuery()

Wykonanie zapytania SQL.


Klasa DataReader pozwala na tworzenie obiektów odczytujących strumień danych otrzymanych w wyniku zapytania. Obiekt typu DataReader posiada metody pozwalające na odczytanie kolejnych rekordów z bazy (tylko w przód) i nie ma możliwości modyfikacji danych w bazie. Przykładowe wykorzystanie klasy DataReader może wyglądać następująco:
strSQL = "delete from ksiazki where id_k=3"

Dim objZapytanie As New System.Data.SqlClient.SqlCommand(strSQL, objPolaczenie)

Utworzenie zapytania SQL oraz nowego obiektu klasy SQLCommand.
Dim objOdczyt As System.Data.SqlClient.SqlDataReader

Utworzenie nowego obiektu DataReader.


objOdczyt= objZapytanie.ExecuteReader()

Wywołanie metody ExecuteReader (wykonanie zapytania SQL) i podstawienie wyniku wyszukiwań do obiektu typu DataReader.


Do While objOdczyt.Read

objOdczyt.GetInt32(0)

objOdczyt.GetString(1)

Loop


Pobranie w pętli kolejnych rekordów i odczytywanie pierwszych dwóch pól bazy (o podanych typach).
Klasa DataAdapter pozwala utworzyć obiekt pełniący kilka zadań:

- pobiera i przechowuje podzbiór danych uzyskany w wyniku zapytania i zapisuje go w obiekcie


typu DataSet.

- umożliwia wykonywanie operacji na danych

- umożliwia przesłanie zaktualizowanych danych do bazy

Należy pamiętać, że obiekt DataAdapter pozwala na bezpołączeniowe operowanie na danych. Oznacza to, że dane pobrane z bazy są umieszczane w pamięci komputera i tam można wykonywać na nich różne operacje. Obiekt ten pozwala zwrócić informacje do bazy, dokonując jednocześnie ich aktualizacji. Do pobierania danych i umieszczania ich w obiekcie typu DataSet służy metoda Fill. Aktualizacja danych zapisanych w pamięci do bazy odbywa się za pomocą metody Update.

Klasa DataSet pozwala tworzyć obiekty przechowujące dane w pamięci. Mogą one zawierać obiekty typu DataTable będące odpowiednikami danych z tabelami oraz pozwalają na definiowanie relacji za pomocą metody DataRelations.

Klasa DataTable jest odpowiednikiem tabeli bazy danych, z tą różnicą, że dane przechowywane są w pamięci komputera. W klasie tej możemy wyróżnić kilka kolekcji pozwalających na uzyskanie informacji o danych, z których najważniejsze są DataRow i DataColumn. Pierwsza z nich pozwala na uzyskanie pojedynczego wiesza z obiektu DataTable, druga natomiast reprezentuje kolumnę w DataTable.

Klasa DataView pozwala na sortowanie i filtrowanie danych umieszczonych w obiekcie typu dataTable.

Przykład wykorzystania klasy DataAdapter może wyglądać następująco:


Dim objTabela As DataTable

Dim objWiersz As DataRow

Deklaracja nowych obiektów typu DataTable i DataRow.
Dim strSQL As String

strSQL = "select * from ksiazki"

Utworzenie ciągu znaków, stanowiącego zapytanie SQL.
Dim objZapytanie As New System.Data.SqlClient.SqlDataAdapter(strSQL, objPolaczenie)

Utworzenie nowego obiektu klasy DataAdapter i zainicjowanie go zapytaniem SQL oraz obiektem typu Connection)


objDane = New DataSet("ksiazki")

Utworzenie nowego obiektu DataSet o nazwie ksiazki.


objZapytanie.Fill(objDane, "ksiazki")

Wypełnienie obiektu typu DataSet danymi, uzyskanymi w wyniku wykonania zapytania.


objTabela = objDane.Tables("ksiazki")

Podstawienie pod obiekt typu DataTable tabeli ksiazki, znajdującej się w obiekcie typu DataSet.


objWiersz = objTabela.Rows(wiersz)

Pobranie jednego wiersza tabeli danych z obiektu typu DataTable i podstawienie go do obiektu typu DataRow (parametr wiersza określa numer rekordu z zestawu danych, zapisanych w pamięci).


txtEID_k.Text = objWiersz.Item(0)

txtEAutor.Text = objWiersz.Item(1)

txtETytul.Text = objWiersz.Item(2)

Odczyt kolejnych pól rekordu i umieszczenie pobranych danych w kontrolach typu TextBox.



Kontrolka DataGrid pozwala wyświetlać dane w postaci tabeli umieszczonej na formularzu. Jest to najprostszy sposób wyświetlenia wyników zapytania w postaci tabelarycznej.

Do wypełnienia kontrolki DatGrid danymi wykorzystuje się wcześniej poznane klasy. Fragment kodu realizujący to zadanie może wyglądać następująco:


Dim strSql As String

strSql = "select * from ksiazki"

Dim objZapytanie As New System.Data.SqlClient.SqlDataAdapter(strSql, objPolaczenie)

Dim objDane As New DataSet("ksiazki")

Dim objDaneWidok As DataView

Dim objTabela As DataTable

Utworzenie obiektów potrzebnych do pobrania i przeglądania danych.
objZapytanie.Fill(objDane, "ksiazki")

objTabela = objDane.Tables("ksiazki")

Wypełnienie obiektu typu DataSet danymi, uzyskanymi w wyniku wykonania zapytania.
objDaneWidok = objTabela.DefaultView

Utworzenie nowego obiektu typu DataView określającego sposób wyświetlania danych.


DataGrid1.DataSource = objDane

DataGrid1.DataMember = "ksiazki"

Przypisanie do kontrolki DataGrid zawartość obiektu typu DataSet (metoda DataSource). Ponieważ obiekt klasy DataSet może zawierać wiele tabel wskazanie poprzez właściwość DataMember, która z tabel będzie wyświetlana w kontrolce.



  1   2   3   4   5   6   7   8   9   10   11


©operacji.org 2017
wyślij wiadomość

    Strona główna