You are on page 1of 27

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Visual Basic .NET. Bazy


danych. Ksiga eksperta
Autor: Jeffrey McManus
Tumaczenie: Mikoaj Szczepaniak (rozdz. 8 12),
Grzegorz Werner (przedmowa, rozdz. 1 7)
ISBN: 83-7197-803-0
Tytu oryginau: Database Access with Visual Basic.NET
Format: B5, stron: 400
Przykady na ftp: 1422 kB

Zaprojektuj i napisz wydajne aplikacje bazodanowe,


korzystajc z Visual Basic .NET
Opracuj schemat bazy danych, stwrz wizy integralnoci
i zastosuj jzyk SQL do manipulowania danymi
Poznaj moliwoci systemu MS SQL Server 2000
i wykorzystaj go w swoich aplikacjach
Zastosuj technologi ADO.NET i Web Services w aplikacjach
napisanych w Visual Basic .NET
Bazy danych to podstawa wikszoci aplikacji biznesowych. Jednak sama baza danych
to nie wszystko naley zapewni osobom korzystajcym ze zgromadzonych w niej
informacji wygodny sposb dostpu do nich. W tym celu pisane s narzdzia suce
do manipulacji danymi i wywietlania ich. Dziki technologii .NET i moliwociom
oferowanym przez jzyk Visual Basic .NET stworzenie aplikacji korzystajcej z zasobw
zgromadzonych w bazie danych nie nastrcza problemw, jednak mimo to naley
podej do tego zadania w odpowiedni sposb. Schemat bazy danych, odpowiednia
konstrukcja zapyta, waciwe zastosowanie obiektw komunikujcych si z baz
to elementy, ktre naley wzi pod uwag, przystpujc do pracy nad aplikacj.
Ksika Visual Basic .NET. Bazy danych. Ksiga eksperta to kompendium wiedzy dla
programistw wykorzystujcych Visual Basic .NET do tworzenia aplikacji opartych na
bazach danych. Przedstawia zasady projektowania i pisania aplikacji WinForms, stron
WebForms oraz usug Web Services w oparciu o baz danych MS SQL Server 2000.
Opisuje zasady stosowania technologii ADO.NET do poczenia aplikacji z tabelami
w bazie i manipulowania zgromadzonymi w nich danymi.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Schemat bazy danych, relacje, wizy integralnoci i normalizacja danych


Konstruowanie zapyta w jzyku SQL
Dostp do bazy z poziomu aplikacji WinForms
Zastosowanie bazy MS SQL Server 2000 w aplikacjach bazodanowych
Podstawy technologii ADO.NET
Stosowanie obiektw DataSet i DataAdapter
Korzystanie z jzyka XML
Tworzenie usug WebServices
Jeli chcesz szybko i efektywnie tworzy aplikacje bazodanowe w oparciu
o technologi .NET, w tej ksice znajdziesz wszystkie niezbdne do tego informacje.

5RKUVTGEK


 
   


Co to jest baza danych? ....................................................................................................................... 18
Co to jest platforma bazy danych? ................................................................................................ 18
Przypadki biznesowe ........................................................................................................................... 18
Przypadek biznesowy 1.1. Prezentacja firmy Nowinki Sp. z o.o. ................................................. 18
Tabele i pola ........................................................................................................................................ 19
Projektowanie bazy danych........................................................................................................... 19
Przypadek biznesowy 1.2. Projektowanie tabel i relacji................................................................ 20
Manipulowanie danymi za pomoc obiektw...................................................................................... 22
Typy danych ........................................................................................................................................ 23
Tworzenie schematu bazy danych ....................................................................................................... 23
Tworzenie bazy danych za pomoc programu Visual Studio............................................................. 25
Okrelanie indeksw i kluczy podstawowych ............................................................................... 28
Tworzenie diagramu bazy danych................................................................................................. 30
Tworzenie i modyfikowanie schematu bazy danych za pomoc programu Microsoft Visio......... 32
Relacje ................................................................................................................................................. 38
Utrzymywanie spjnoci danych dziki integralnoci referencyjnej ............................................. 40
Testowanie integralnoci referencyjnej za pomoc narzdzia Server Explorer ............................. 40
Kaskadowe aktualizowanie i usuwanie danych............................................................................. 42
Normalizacja........................................................................................................................................ 43
Relacje jeden do jednego............................................................................................................... 45
Relacje jeden do wielu .................................................................................................................. 46
Relacje wiele do wielu .................................................................................................................. 46
Tworzenie interfejsu uytkownika w aplikacji Windows Forms ......................................................... 47
czenie si z baz danych i praca z rekordami ............................................................................ 47
Tworzenie aplikacji do przegldania danych................................................................................. 48
Wizanie programowe................................................................................................................... 51
Kontrolki danych w .NET ............................................................................................................. 52
Aktualizowanie rekordw w przegldarce danych ........................................................................ 52
Tworzenie nowych rekordw w formularzu powizanym z danymi ............................................. 54
Usuwanie rekordw z powizanego formularza............................................................................ 55
Sprawdzanie poprawnoci danych w powizanym formularzu ..................................................... 55
Sprawdzanie poprawnoci na poziomie mechanizmu bazy danych............................................... 56
Podsumowanie..................................................................................................................................... 57
Pytania i odpowiedzi ..................................................................................................................... 57

Visual Basic .NET. Bazy danych. Ksiga eksperta

  ! "#$ %&


Co to jest kwerenda?............................................................................................................................ 59
Testowanie kwerend za pomoc narzdzia Server Explorer................................................................ 60
Pobieranie rekordw za pomoc klauzuli SELECT............................................................................. 62
Wyznaczanie rda rekordw za pomoc klauzuli FROM................................................................. 63
Okrelanie kryteriw za pomoc klauzuli WHERE............................................................................. 64
Operatory w klauzulach WHERE.................................................................................................. 65
Sortowanie kryteriw za pomoc klauzuli ORDER BY...................................................................... 67
Sortowanie w porzdku malejcym............................................................................................... 67
Sortowanie wedug wielu pl ........................................................................................................ 68
Wywietlanie pocztku lub koca zakresu za pomoc operatora TOP ................................................ 68
Kwerendy, ktre zwracaj okrelony odsetek rekordw ............................................................... 69
Sprzganie tabel w kwerendzie............................................................................................................ 69
Zapisywanie sprzenia w jzyku SQL......................................................................................... 70
Pobieranie dodatkowych danych za pomoc sprzenia zewntrznego ........................................ 71
Wykonywanie oblicze w kwerendach ............................................................................................... 73
Tworzenie aliasw nazw pl za pomoc klauzuli AS.......................................................................... 74
Kwerendy grupujce i podsumowujce dane....................................................................................... 75
Uywanie klauzuli HAVING w celu okrelenia kryteriw kwerendy grupujcej ......................... 76
Funkcja SUM ................................................................................................................................ 77
Inne funkcje agregacyjne SQL-a ................................................................................................... 77
Kwerendy skadajce ........................................................................................................................... 79
Podkwerendy ....................................................................................................................................... 79
Manipulowanie danymi za pomoc SQL............................................................................................. 80
Polecenia aktualizacji .................................................................................................................... 81
Polecenia usunicia ....................................................................................................................... 82
Polecenia wstawienia .................................................................................................................... 82
Tworzenie tabel za pomoc instrukcji SELECT INTO ................................................................. 83
Jzyk definiowania danych.................................................................................................................. 83
Tworzenie elementw bazy danych za pomoc polecenia CREATE ............................................ 84
Dodawanie ogranicze do tabel..................................................................................................... 84
Tworzenie indeksu za pomoc polecenia CREATE INDEX......................................................... 85
Usuwanie tabel i indeksw za pomoc polecenia DROP .............................................................. 86
Modyfikowanie definicji tabeli za pomoc polecenia ALTER ........................................................ 86
Podsumowanie..................................................................................................................................... 87
Pytania i odpowiedzi ..................................................................................................................... 87

 "#$"'((()  *&


Konfigurowanie i uruchamianie oprogramowania Microsoft SQL Server 2000 ................................. 91
Wymagania instalacyjne oprogramowania SQL Server 2000.......................................................... 92
Instalacja oprogramowania SQL Server 2000 ............................................................................... 92
Uruchamianie i zatrzymywanie SQL Servera za pomoc programu SQL Service Manager ......... 95
Okrelanie sposobu uruchamiania SQL Servera............................................................................ 96
Podstawowe informacje o obsudze oprogramowania SQL Server 2000 ............................................ 96
Uruchamianie programu SQL Server Enterprise Manager............................................................ 97
Tworzenie bazy danych za pomoc programu SQL Enterprise Manager...................................... 98
Tworzenie tabel w bazie danych SQL Servera ............................................................................ 100
Dostp do bazy danych za pomoc programu SQL Query Analyzer........................................... 106

Spis treci

Sterowanie dostpem do danych za pomoc widokw................................................................ 110


Tworzenie i uruchamianie procedur skadowanych .................................................................... 114
Wywietlanie tekstu istniejcego widoku lub procedury skadowanej ........................................ 118
Tworzenie wyzwalaczy ............................................................................................................... 119
Przypadek biznesowy 3.1. Tworzenie procedury wyzwalanej, ktra umoliwia
wyszukiwanie wyrazw o podobnej wymowie ........................................................................ 120
Zarzdzanie kontami i bezpieczestwem za pomoc programu SQL Server Enterprise Manager...122
Okrelanie atrybutw bezpieczestwa za pomoc programu SQL Query Analyzer.................... 128
Usuwanie obiektw z bazy danych ............................................................................................. 130
Przypadek biznesowy 3.2. Generowanie skryptu tworzcego baz danych ................................ 131
Podsumowanie................................................................................................................................... 146
Pytania i odpowiedzi ................................................................................................................... 146

+ , -./) 


+&
Przegld technologii ADO.NET ........................................................................................................ 149
Motywacja i filozofia .................................................................................................................. 150
Porwnanie ADO.NET z klasyczn technologi ADO (ADO 2.X) ................................................. 151
Obiekty ADO.NET w oglnej strukturze .NET Framework ....................................................... 151
Interfejsy aplikacyjne .................................................................................................................. 152
Przegld obiektw dostawczych .NET .............................................................................................. 153
SqlClient...................................................................................................................................... 153
OleDb .......................................................................................................................................... 153
Odbc............................................................................................................................................ 153
Kluczowe obiekty........................................................................................................................ 154
Obiekt Connection............................................................................................................................. 155
Obiekt Command............................................................................................................................... 159
Uywanie obiektu Command w poczeniu z parametrami i procedurami skadowanymi.......... 160
Wykonywanie polece ................................................................................................................ 163
Obiekt DataReader ............................................................................................................................ 169
Uywanie komponentw projektowych Connection i Command...................................................... 172
Inne obiekty dostawcw danych........................................................................................................ 173
Przypadek biznesowy 4.1. Pisanie procedury, ktra archiwizuje wszystkie zamwienia
z okrelonego roku ................................................................................................................... 174
Podsumowanie................................................................................................................................... 179
Pytania i odpowiedzi ................................................................................................................... 179

% , -./)0," *


Zastosowania i komponenty obiektu DataSet.................................................................................... 181
Wypenianie i modyfikowanie obiektu DataSet ................................................................................ 183
Definiowanie schematw DataTable........................................................................................... 183
Dodawanie danych do obiektu DataTable ................................................................................... 187
Aktualizowanie obiektu DataSet ................................................................................................. 188
Dostp do danych w obiekcie DataTable .................................................................................... 191
Relacje midzy tabelami.............................................................................................................. 196
Ograniczenia tabel....................................................................................................................... 199
Korzystanie z komponentu DataSet................................................................................................... 203
Podsumowanie................................................................................................................................... 209
Pytania i odpowiedzi ................................................................................................................... 209

Visual Basic .NET. Bazy danych. Ksiga eksperta

1 , -./)0,  


Wypenianie obiektu DataSet ze rda danych................................................................................. 212
Aktualizowanie rda danych........................................................................................................... 216
Ustawianie polece aktualizacyjnych.......................................................................................... 218
Przypadek biznesowy 6.1. czenie wielu powizanych tabel.................................................... 231
Podsumowanie................................................................................................................................... 236
Pytania i odpowiedzi ................................................................................................................... 236

 , -./)00 


0 
Wykrywanie konfliktw wspbienoci........................................................................................... 237
Odwzorowania nazw tabel i kolumn.................................................................................................. 241
Obiekty DataView ............................................................................................................................. 243
Przypadek biznesowy 7.1. czenie danych pochodzcych z rnych rde............................. 249
Obiekty DataSet ze cis kontrol typw ......................................................................................... 253
Podsumowanie................................................................................................................................... 258
Pytania i odpowiedzi ................................................................................................................... 258

*  0
2!3  -./ %&
Tworzenie projektw baz danych ...................................................................................................... 259
Odwoania do baz danych.................................................................................................................. 261
Skrypty .............................................................................................................................................. 262
Skrypty tworzce......................................................................................................................... 263
Skrypty zmieniajce .................................................................................................................... 266
Wykonywanie skryptw.............................................................................................................. 269
Pliki polece................................................................................................................................ 270
Kwerendy .......................................................................................................................................... 275
Podsumowanie................................................................................................................................... 278
Pytania i odpowiedzi ................................................................................................................... 279

& 45067$ ! -./ *


Przegld technologii XML ................................................................................................................ 282
Rodzina technologii XML........................................................................................................... 284
XML i dostp do danych ............................................................................................................. 286
Klasy obsugujce XML na platformie .NET .................................................................................... 287
Praca w oparciu o obiektowy model dokumentu......................................................................... 288
Stosowanie jzyka XPATH......................................................................................................... 289
Rozszerzanie systemu SQL Server o SQLXML 3.0 oraz IIS ............................................................ 292
Instalacja i konfiguracja rozszerzenia SQLXML 3.0 .................................................................. 292
Konfigurowanie wynikw ........................................................................................................... 299
Stosowanie standardw XML, XSLT oraz SQLXML podczas tworzenia raportw ......................... 299
Podsumowanie................................................................................................................................... 301
Pytania i odpowiedzi ................................................................................................................... 302

 ( /
!8, -./5067$ (%
Podstawowe operacje odczytu i zapisu dokumentw XML .............................................................. 306
Odczytywanie dokumentw XML .............................................................................................. 306
Zapisywanie dokumentw XML ................................................................................................. 310
Format DiffGrams ....................................................................................................................... 316
Przykad biznesowy 10.1. Przygotowywanie plikw XML dla partnerw biznesowych ............ 322

Spis treci

Tworzenie obiektu XmlReader na podstawie obiektu Command...................................................... 335


Stosowanie obiektu XmlDataDocument............................................................................................ 337
Podsumowanie................................................................................................................................... 340
Pytania i odpowiedzi ................................................................................................................... 340

 "9:  !0 

0; 
!85" -./ +
Przegld technologii ASP.NET ......................................................................................................... 343
Kontrolki HTML kontra kontrolki serwera ................................................................................. 344
Dodatkowe wasnoci technologii ASP.NET .............................................................................. 345
Uzyskiwanie dostpu do bazy danych za porednictwem ASP.NET................................................. 346
Dodawanie uytkownika ASPNET do grupy uytkownikw systemu SQL Server .................... 347
Opcja TRUSTED_CONNECTION w praktyce .......................................................................... 353
Praca z kontrolk DataGrid ......................................................................................................... 356
Poprawa wydajnoci aplikacji baz danych opartych na technologii ASP.NET
za pomoc procedur skadowanych ................................................................................................ 358
Podsumowanie................................................................................................................................... 361
Pytania i odpowiedzi ................................................................................................................... 361

  <89"' 


!8; =; 1
Stosowanie warstwy poredniej dla zapewnienia logiki prezentacji.................................................. 364
Wykorzystanie danych w warstwie poredniej ................................................................................ 367
Tworzenie komponentw wielokrotnego uytku dla warstwy poredniej................................... 368
Wykorzystywanie komponentw pochodzcych z innej aplikacji ......................................... 371
Udostpnianie obiektw za porednictwem usug Web Services ...................................................... 373
Udostpnianie istniejcego obiektu za porednictwem usugi Web Service................................ 375
Programowy dostp do usug Web Services................................................................................ 377
Zakoczenie....................................................................................................................................... 380
Podsumowanie................................................................................................................................... 380
Pytania i odpowiedzi ................................................................................................................... 380

"0 *

4Q\F\KC





Czasem mona odnie wraenie, e kiedy programista budzi si rano, ju czeka na niego
nowy (i odmienny) przygotowany przez Microsoft model dostpu do baz danych. W niniejszym rozdziale skupimy si na jego najnowszym wcieleniu ADO.NET. Najpierw
wyjanimy, dlaczego powsta ten model dostpowy i zastanowimy si, czy jego wprowadzenie byo uzasadnione. Nastpnie przedstawimy przegld modelu ADO.NET i jego
oglnej architektury.
Celem tego rozdziau jest przygotowanie Czytelnikw do pracy z ADO.NET. Musimy
zatem omwi podstawy jego dziaania i dokadniej przyjrze si najwaniejszym obiektom
dostawcy danych ADO.NET ,  
,  i  
 . W rozdziaach 5., 6. i 7. zajmiemy si bardziej zaawansowanymi i interesujcymi obiektami,
ktre oferuje ADO.NET. Wszystkie one wspdziaaj z obiektem   centralnym
elementem technologii ADO.NET.


  
Ci, ktrzy ju od pewnego czasu tworz aplikacje bazodanowe za pomoc Visual Basica,
przywykli do tego, e Microsoft co kilka lat wprowadza nowy, ulepszony model dostpu
do danych. Oprcz kolejnego trzyliterowego skrtu pojawia si nowy interfejs API i model
obiektowy, ktre trzeba pozna i opanowa. W ostatnich latach programici uczyli si
kolejno modeli ODBC, DAO, RDO i ADO, a obecnie maj do czynienia z ADO.NET.
Po wprowadzeniu kadej nowej technologii programista musi przestudiowa jej cele i zaoenia projektowe, a nastpnie zada sobie pytanie: czy ja i mj zesp powinnimy przestawi si na t technologi? W wikszoci przypadkw odpowied brzmi twierdzco,
chyba e programista pracuje nad projektem, ktrego obecne i przysze wymagania nie
maj zwizku z nowymi cechami i funkcjami technologii. Zdarza si to rzadko, cho trzeba
przyzna, e dostpno technologii RDO (Remote Data Object) rzeczywicie nie miaa
wpywu na projekty wykorzystujce mechanizm JET (MDB) (technologia DAO jest cigle
lepsz metod dostpu do baz danych MDB).

150

Visual Basic .NET. Bazy danych. Ksiga eksperta



 

Zadajmy wic zasadnicze pytanie: do czego potrzebny jest nowy model dostpu do danych?
Mona na nie odpowiedzie sloganem reklamowym Toyoty z lat 70.: Dostalicie, o co
prosilicie. ADO.NET oferuje wiele rzeczy, ktrych programici domagali si od czasu
wprowadzenia technologii ADO. To prawda, e z czasem dodano do ADO funkcje takie
jak rozczone zestawy rekordw oraz obsuga XML. Problem polega na tym, e funkcje
te s wanie dodatkami. Uzupeniaj one pierwotny projekt, wic s niekompletne i niewygodne w uyciu.
Klasyczna (oparta na modelu COM) technologia ADO zawiera pojedynczy obiekt, 

, ktrego uywa si do najrniejszych celw. W zalenoci od rnych parametrw
konfiguracyjnych takich jak typ kursora, lokalizacja kursora i typ blokowania obiekt

 dziaa inaczej i peni rne funkcje.
W ADO.NET poszczeglne funkcje zostay przypisane oddzielnym obiektom, ktrych
mona uywa niezalenie albo w poczeniu z innymi. Dziki temu programici mog
korzysta z obiektw zoptymalizowanych pod ktem konkretnej funkcji i niezawierajcych dodatkowego bagau. Pomimo to rne obiekty dobrze ze sob wsppracuj,
zapewniajc wiksz funkcjonalno.


       
ADO.NET oferuje doskona i elastyczn obsug aplikacji rozproszonych midzy wieloma komputerami (serwerami baz danych, serwerami aplikacji i klienckimi stacjami
roboczymi). Szczeglnie godna uwagi jest obsuga aplikacji rozczonych (trj- lub wielowarstwowych), ktra minimalizuje wspbiene obcienie i blokowanie zasobw
w serwerze baz danych. Rezultatem jest wiksza skalowalno moliwo obsugi
wikszej liczby uytkownikw jednoczenie poprzez stopniow rozbudow sprztu. Jest
to istotne zwaszcza w aplikacjach WWW.

 
Cho klasyczna technologia ADO moe zapisywa i odczytywa dane w formacie XML,
to rzeczywisty format jest raczej niezwyky i niewygodnie si z nim pracuje. Ponadto
obsug XML dodano do ADO na stosunkowo pnym etapie, wic jest ona do ograniczona i nieelastyczna. W przypadku ADO.NET obsuga XML od pocztku stanowia
zasadniczy element projektu. Filozofia ADO.NET gosi, e dane to dane bez wzgldu
na rdo ich pochodzenia mona przetwarza je jako dane relacyjne albo hierarchiczne
w zalenoci od potrzeb albo w zalenoci od uywanego narzdzia programistycznego.
Co wicej, jzyka XML uywa si jako formatu transmisji danych midzy rnymi warstwami i komputerami. Nie tylko eliminuje to problem przepuszczania wywoa COM
przez zapory sieciowe, ale rwnie uatwia wspdzielenie danych z aplikacjami, ktre
dziaaj na platformach innych ni Windows (poniewa kady system moe przetwarza
tekstowe dane XML).

Rozdzia 4.  ADO.NET dostawcy danych

151

  !"#$


ADO.NET nie jest po prostu nastpn wersj ADO. Technologia ta zostaa zaprojektowana i zaimplementowana jako element .NET Framework. Oznacza to, e dziaa jako
kod zarzdzany (ang. Managed Code), a wszystkie jej obiekty zachowuj si zgodnie
z tym, czego przywyklimy oczekiwa od obiektw .NET. Jest take czci standardowego pakietu .NET Framework, co pozwala unikn kopotw z wersjami, z ktrymi
programici ADO musieli zmaga si w przeszoci.

#$ $
%&
Cho technologi ADO.NET zaprojektowano i zaimplementowano jako cz .NET Framework, wiele jej elementw powinno wyglda znajomo dla programistw klasycznej
technologii ADO. Nawet w przypadku funkcji nowych lub zrealizowanych w odmienny
sposb dowiadczony programista ADO bdzie mg wykorzysta nabyt wczeniej
wiedz, aby szybko zrozumie i zastosowa obiekty ADO.NET.

2QTYPCPKG#&10'6\MNCU[E\PVGEJPQNQIK#&1
#&1:
Rnice midzy ADO.NET a klasyczn technologi ADO mona streci w nastpujcy
sposb:


Klasyczna technologia ADO zostaa zaprojektowana pod ktem dostpu


z poczeniem i jest zwizana z fizycznym modelem danych. Technologia
ADO.NET zostaa zaprojektowana z myl o dostpie bez poczenia i pozwala
na logiczne modelowanie danych.

W ADO.NET istnieje wyrane rozrnienie midzy modelem dostpu


z poczeniem a modelem dostpu bez poczenia.

W ADO.NET nie ma waciwoci   ,     ani .


Technologia ta uywa tylko statycznych kursorw klienckich i blokowania
optymistycznego.

Zamiast uywa pojedynczego, uniwersalnego obiektu, w ADO.NET funkcje


klasycznego obiektu 
 podzielono na mniejsze, bardziej wyspecjalizowane
obiekty, takie jak  
 ,   i   .

ADO.NET umoliwia manipulowanie danymi XML, a nie tylko wykorzystywanie


jzyka XML jako formatu wejcia-wyjcia.

ADO.NET zapewnia cis kontrol typw w obiektach   zamiast uywania


typu  do obsugi wszystkich pl. Uatwia to wykrywanie bdw w czasie
pisania kodu i zwiksza wydajno aplikacji.


        
Na rysunku 4.1 przedstawiono miejsce klas ADO.NET w oglnej strukturze .NET Framework. Na dole znajduje si Common Language Framework (CLR), czyli infrastruktura

152

Visual Basic .NET. Bazy danych. Ksiga eksperta



Klasy ADO.NET
w strukturze
.NET Framework

uruchomieniowa wszystkich aplikacji .NET (bez wzgldu na jzyk, w ktrym zostay


napisane). rodowisko CLR zapewnia wsplny system plikw, zarzdzanie pamici
i czasem ycia obiektw.
Nastpna warstwa logiczna, ktra korzysta z usug CLR, to zbir podstawowych klas
systemowych. To wanie te klasy zapewniaj bogaty zestaw funkcji, z ktrych mog
korzysta aplikacje .NET. Na rysunku 4.1 pokazano tylko niektre klasy z biblioteki
.NET Framework. W praktyce warstwa ta jest nowym interfejsem programistycznym
(ang. application programming interface, API) systemu Windows. W przeszoci funkcje
systemu Windows byy dostpne za porednictwem interfejsu Windows API, ktry skada si z wielu niespjnych wywoa systemowych. W technologii .NET dostp do tych
(i nowych) funkcji odbywa si za porednictwem waciwoci i metod eksponowanych
przez podstawowe klasy systemowe. Dziki takiemu podejciu pisanie aplikacji Windows
jest bardziej spjne i komfortowe bez wzgldu na to, czy s to aplikacje stacjonarne, internetowe czy usugi Web Services.
Warstwa ta zawiera kilka przestrzeni nazw (grup klas i innych definicji) zwizanych
z dostpem do danych:   ,     oraz   .
W dalszej czci niniejszego rozdziau oraz w rozdziaach 5., 6. i 7. przyjrzymy
si bliej wielu klasom i definicjom zawartym w tych przestrzeniach nazw.

  !

Na najwyszym poziomie pojawia si zrnicowanie midzy typami aplikacji, ktre mog
budowa programici. Istniej klasy i kontrolki do budowania (klasycznych) aplikacji
Windows opartych na formularzach (Windows Forms), inne klasy i kontrolki do budowania aplikacji internetowych opartych na przegldarce (Web Forms), i kolejny zbir klas
do budowania usug Web Services. Wszystkie one korzystaj jednak ze wsplnej biblioteki klas logiki aplikacyjnej podstawowych klas systemowych.
Wiemy ju mniej wicej, jakie miejsce zajmuj klasy ADO.NET w oglnej strukturze
.NET Framework, wic przyjrzyjmy si bliej obiektom ADO.NET.

Rozdzia 4.  ADO.NET dostawcy danych

153

 
 
  
Pomimo nacisku na model dostpu bez poczenia nadal konieczne jest czenie si
z fizyczn baz danych w celu pobrania, zaktualizowania, wstawienia i (lub) usunicia
danych. Oprogramowanie, ktre czy si i komunikuje z fizyczn baz danych, w terminologii ADO.NET okrela si mianem dostawcy danych .NET (ang .NET Data Provider). Dostawca danych .NET to odpowiednik dostawcy OLEDB albo sterownika ODBC.
Dostawca danych skada si z kilku obiektw realizujcych funkcje zdefiniowane przez
klasy i interfejsy, z ktrych si wywodz.
Obecnie dostpnych jest trzech dostawcw danych ADO.NET, kady zdefiniowany we
wasnej przestrzeni nazw. W nazwach obiektw nalecych do tych przestrzeni nazw
uywa si przedrostkw  ,  i 
. Kiedy piszemy o tych obiektach w sposb
oglny, uywamy nazwy obiektu bez adnego przedrostka.

"# $

Dostawca danych  jest zoptymalizowany pod ktem wsppracy z SQL Serverem 7.0 i jego nowszymi wersjami. Osiga wiksz wydajno, poniewa (1) komunikuje si z baz danych za porednictwem natywnego protokou Tabular Data Stream
(TDS), a nie protokou OLEDB, ktry musi odwzorowywa interfejs OLEDB na protok TDS; (2) eliminuje dodatkowe koszty zwizane z usugami zgodnoci COM; (3) nie
oferuje funkcji, ktre nie s obsugiwane przez SQL Server. Obiekty tego dostawcy s
zawarte w przestrzeni nazw   .

 
Dostawca danych   uzyskuje dostp do danych za porednictwem istniejcego natywnego dostawcy OLEDB (COM) oraz usug zgodnoci COM. Uywa si go do obsugi
baz danych innych ni SQL Server 7.0 i jego nowsze wersje. Zapewnia dostp do kadej
bazy danych, dla ktrej napisano dostawc OLEDB. Obiekty tego dostawcy s zawarte
w przestrzeni nazw    .

%
Dostawcy danych 
 uywa si do obsugi baz danych, ktre nie maj wasnego dostawcy
.NET, ani dostawcy OLEDB (COM). Ponadto w przypadku niektrych baz danych sterownik ODBC moe zapewnia wiksz wydajno ni sterownik OLEDB, wic warto przeprowadzi testy, aby ustali, ktry z nich lepiej odpowiada wymaganiom konkretnej aplikacji. Obiekty tego dostawcy s zawarte w przestrzeni nazw    
.
Pisanie dostawcy danych ODBC opnio si nieco w stosunku do reszty .NET
Framework i Visual Studia .NET. Nie zosta on wic doczony do pierwotnego
wydania Visual Studia .NET, ale mona go pobra z witryny WWW Microsoftu.
Warto te sprawdza, czy nie pojawili si nowi dostawcy danych .NET.

154

Visual Basic .NET. Bazy danych. Ksiga eksperta


Obecnie w witrynie WWW dostpny jest rwnie dostawca danych Oracle .NET.
Dostawcy ODBC i Oracle s doczeni do wersji 1.1 .NET Framework dostarczanej
wraz z Visual Studiem .NET 2003. W rezultacie przestrze nazw dostawcy ODBC
zmieni si z:

 

na:




W przykadach zamieszczonych w niniejszym rozdziale uywana jest wersja 1.0


dostawcy ODBC. Ci, ktrzy korzystaj ju z wersji 1.1, powinni zmieni przestrze
nazw w pokazany wyej sposb.

&   

Kady dostawca danych zawiera cztery kluczowe obiekty, ktre s wymienione w tabeli 4.1.
 

Kluczowe obiekty dostawcw danych






Nawizuje poczenie ze specyficznym rdem danych

 

Wykonuje polecenie w rdle danych; eksponuje kolekcj obiektw  oraz


metody do wykonywania rnych typw polece

  

Zwraca jednokierunkowy, przeznaczony tylko do odczytu strumie danych ze rda danych

  

Tworzy pomost midzy obiektem   a rdem danych, aby umoliwi pobieranie
i zapisywanie danych

Kady obiekt wywodzi si z uniwersalnej klasy bazowej i implementuje uniwersalne


interfejsy, ale zapewnia wasn, specyficzn implementacj. Na przykad obiekty  

 ,   
 i 
 
 wywodz si z klasy  

i implementuj te same interfejsy. Jednake kady z nich implementuje je inaczej, na
uytek odpowiedniego rda danych.
Przestrze nazw     zawiera nastpujce obiekty:


 ,

  
,

   
 ,

  
 .

Przestrze nazw    zawiera nastpujce obiekty:




,

 
,

  
 ,

 
 .

Rozdzia 4.  ADO.NET dostawcy danych

155

Wreszcie przestrze nazw    


 zawiera nastpujce obiekty:



,


 
,


  
 ,


 
 .

Wszyscy przyszli dostawcy danych bd mie wasne przestrzenie nazw i bd implementowa wymagane obiekty w taki sam sposb.


 

Obiekt ADO.NET  przypomina znany i lubiany obiekt  z klasycznej
technologii ADO. Suy do nawizywania poczenia z konkretnym rdem danych
z wykorzystaniem nazwy uytkownika i hasa okrelonych przez acuch poczeniowy
(ang. connection string). Mona dostosowa poczenie do wasnych potrzeb, okrelajc
odpowiednie parametry i wartoci w acuchu poczeniowym. Obiekt  
(albo

 ) moe nastpnie uy tego poczenia, aby wykona dane operacje na
rdle danych.
W przeciwiestwie do obiektu  z ADO 2.X, obiekt  z ADO.NET
nie ma metod !" ani # . Polecenia SQL mona wykonywa tylko
za pomoc obiektw  
albo 
 . Odpowiednikiem metody #
jest metoda $ #   obiektu  .

Cho pochodne obiekty  ,  i 


 implementuj te same interfejsy, istniej midzy nimi rnice. Odmienne s, na przykad, formaty
acuchw poczeniowych. Format acucha   zaprojektowano tak, aby
odpowiada (z niewielkimi wyjtkami) standardowemu acuchowi poczeniowemu
OLEDB. Format acucha 
 jest zbliony do standardowego formatu acucha poczeniowego ODBC, cho nie identyczny. Format acucha 
rni si od dwch pozostaych, poniewa zawiera parametry dotyczce tylko SQL
Servera 7.0 i jego nowszych wersji.
Co wicej, niektre obiekty zawieraj dodatkowe waciwoci. Na przykad obiekt 
 ma waciwo %
 , za pomoc ktrej okrela si dostawc OLEDB,
a obiekt 
 ma waciwo % , za pomoc ktrej okrela si sterownik
ODBC. Obiekt  nie ma adnej z tych waciwoci, poniewa jego rdo
danych jest z gry okrelone (SQL Server). Ma natomiast waciwoci &
i '  ( specyficzne dla SQL Servera i nieobsugiwane przez dwa pozostae
typy pocze.
Do teorii; przejdmy wreszcie do pisania kodu! Wszystkie kluczowe obiekty dostawcw danych zostan zaprezentowane na prostych, konkretnych przykadach. Zaczniemy
od poniszego przykadowego programu i bdziemy stopniowo go rozwija.

156

Visual Basic .NET. Bazy danych. Ksiga eksperta



Uruchomi Visual Studio .NET.

Utworzy nowy projekt Visual Basica Windows Application.

Nada projektowi nazw   ) #.

Okreli ciek do folderu, w ktrym zostan zapisane pliki projektu.

Powikszy formularz * +.

W oknie waciwoci formularza * + ustawi jego waciwo " na 

 ),
#.

Przecign przycisk z zakadki Windows Forms przybornika do grnego

lewego rogu formularza.



W oknie waciwoci przycisku ustawi waciwo -  na 
,
a waciwo " na ./&.

Przecign pole tekstowe z zakadki Windows Forms przybornika na praw

stron formularza.

W oknie waciwoci pola tekstowego ustawi waciwo -  na ",
waciwo  na  , a waciwo    na #.

Powikszy pole tekstowe tak, aby pokrywao mniej wicej 80 procent obszaru

formularza.
Po wykonaniu powyszych czynnoci formularz powinien wyglda tak jak na rysunku 4.2.



Formularz Form1
w projekcie
ObiektyDostawcowDanych

Teraz naley przeczy si do widoku kodu formularza i doda ponisze wiersze na


grze pliku. Powoduj one zaimportowanie przestrzeni nazw, ktrych bdziemy uywa
podczas pisania przykadowych aplikacji w niniejszym rozdziale:



 

 


 

Rozdzia 4.  ADO.NET dostawcy danych

157

Zwrmy uwag na uniwersalne klasy i definicje ADO.NET oraz oddzieln przestrze


nazw kadego dostawcy danych.
Edytor Visual Studia moe nie rozpozna przestrzeni nazw    
,
poniewa w rzeczywistoci jest to dodatek do podstawowego wydania produktu.
W takim przypadku naley wykona ponisze czynnoci:

Pobra plik instalacyjny dostawcy danych 
 z witryny WWW Microsoftu
i zainstalowa go w komputerze.

W oknie Solution Explorer klikn prawym przyciskiem myszy wze References
projektu   )) #.

Z podrcznego menu wybra polecenie Add Reference.

Na karcie .NET okna dialogowego Add Reference przewin w d list
komponentw i odszuka pozycj Microsoft.Data.Odbc.dll.

Klikn dwukrotnie pozycj Microsoft.Data.Odbc.dll, aby doda j do listy
Selected Components na dole okna dialogowego.

Klikn przycisk OK, aby zamkn okno dialogowe.
Jeli z jakich przyczyn nie zostanie rozpoznana ktra z pozostaych przestrzeni
nazw, trzeba bdzie doda odwoanie do biblioteki System.Data.dll. W tym celu naley
wykona czynnoci 2 6, a w punkcie 4. zamieni nazw Microsoft.Data.Odbc.dll
1
na System.Data.dll .

Teraz w procedurze obsugi zdarzenia 0 naley wpisa kod przedstawiony na listingu 4.1, ktry otwiera poczenie z baz danych  w SQL Serverze.
Kod ten wywietla stan poczenia przed prb nawizania poczenia i po niej.
!

Kod, ktry otwiera poczenie z baz danych i wywietla jego stan

      
  !"#  
 
' Tworzenieinstancji obiektu Connection
 $ #
' Ustawianie acucha poczeniowego
 "$%!$ &'( $ '   $(%
)(  #
' Wywietlanie stanu poczenia
  $
   # 
)( *)$)( *)+%,-./01 %
!
)( *)$)( *)+%,-./0/ 2%
!
)( *)$)( *)+&  3+&  3
' Otwieranie poczenia
)( *)$)( *)+% 1 -./ / /. & %
+&  3+&  3
 #

Uytkownicy Visual Studia .NET 2003 powinni zamieni przestrze nazw 
 
na 
  przyp. tum.

158

Visual Basic .NET. Bazy danych. Ksiga eksperta


' Wywietlanie stanu poczenia
  $
   # 
)( *)$)( *)+%,-./01 %
!
)( *)$)( *)+%,-./0/ 2%
!
)( *)$)( *)+&  3
! 

Now przydatn funkcj VB.NET jest moliwo automatycznego uzyskiwania tekstowej


reprezentacji wartoci wyliczeniowej () zamiast pisania procedury, ktra wykonuje
instrukcj   na wszystkich moliwych wartociach wyliczenia. Typy wyliczane
s obiektami i dziedzicz metod  1, ktra zwraca acuch odpowiadajcy
biecej wartoci wyliczenia.
Na listingu 4.1 mona zastpi jednym wierszem instrukcje (!, ktre wywietlaj
stan poczenia. Zamiast:
' Wywietlanie stanu poczenia
  $
   # 
)( *)$)( *)+%,-./01 %
!
)( *)$)( *)+%,-./0/ 2%
!

mona napisa:
' Wywietlanie stanu poczenia
)( *)$)( *)+%,-./01 %+
   *"+&  3

Po uruchomieniu projektu   )) # i klikniciu przycisku Poczenie


w polu tekstowym powinny ukaza si komunikaty, e poczenie jest zamknite, otwierane, a wreszcie otwarte (zobacz rysunek 4.3).



Wyniki otwierania
poczenia
za pomoc kodu
z listingu 4.3.

Podczas pisania kodu prawdziwych aplikacji trzeba wybra i wdroy strategi obsugi
bdw w poszczeglnych procedurach i operacjach. Taka strategia zwykle opiera si
na bloku   #. Zwykle nie doczamy tego kodu do przykadw, poniewa
skupiamy si na programowaniu baz danych, a nie na oglnych aspektach
programowania w VB.NET.

Rozdzia 4.  ADO.NET dostawcy danych

159


 
Obiekt ADO.NET  
rwnie powinien wydawa si znajomy dowiadczonym
programistom ADO 2.X. Podobnie jak obiekt ADO.NET , przypomina on
swojego poprzednika z ADO 2.X. Obiekt ten umoliwia wydawanie polece rdu danych
oraz pobieranie danych i (lub) wynikw (jeli polecenie zwraca jakie wyniki).
Zgodnie z oczekiwaniami obiekt  
ma waciwoci  
" i  
,
ktre definiuj tekst i typ polecenia, waciwo , ktra okrela poczenie
uywane do wykonania polecenia, oraz waciwo  
, ktra okrela, jak
dugo polecenie moe by wykonywane, zanim zostanie wygenerowany bd. Ma rwnie
waciwo  , ktra jest kolekcj parametrw przekazywanych wykonywanemu
poleceniu. Wreszcie, w przeciwiestwie do klasycznego obiektu ADO  
, waciwo
   okrela transakcj, w ramach ktrej wykonywane jest polecenie.
Wszystkie trzy wersje obiektu  
( ,  i 
) maj identyczne waciwoci i metody z jednym wyjtkiem. Obiekt  
ma jedn dodatkow metod
!"2
 . Metoda ta wykorzystuje mechanizm SQL Servera, ktry automatycznie zwraca dane w formacie XML (kiedy do kwerendy SQL
 zostanie dodana
klauzula , ).
Inn rnic midzy poszczeglnymi wersjami obiektu  
s wartoci waciwoci
 
. Wszystkie trzy wersje obsuguj wartoci " i  

 ,
ale obiekt   
obsuguje rwnie trzeci warto    . Pozwala
ona efektywnie wczyta zawarto caej tabeli poprzez ustawienie waciwoci
 
 na    , a waciwoci  
" na nazw tabeli.

Teraz naley rozbudowa przygotowany wczeniej formularz (zobacz rysunek 4.1):



Doda kolejny przycisk tu pod przyciskiem  poprzez przecignicie

go z zakadki Windows Forms przybornika.



W oknie waciwoci przycisku ustawi waciwo -  na  
,
a waciwo " na .

Wpisa kod obsugi przycisku  
(zobacz listing 4.2).
!

Kod, ktry otwiera poczenie z baz danych i przygotowuje obiekt polecenia

        
  !"#    
' Tworzenie instancji obiektu Connection
 $ 
%!$ &'( $ '   $(%#
' Tworzenie instancji obiektw Command i Parameter
    $  
)(  #
' Otwieranie poczenia
 #
' Ustawianie poczenia i tekstu polecenia w obiekcie Command
 $
   *$  * *)

160

Visual Basic .NET. Bazy danych. Ksiga eksperta


   *)$%   (   (&%
' Wypisywanie acucha polecenia
)( *)$%4 5(& 6%+&  3
)( *)$)( *)+&  * +
   *)#+&  3
! 

Po uruchomieniu projektu   )) # i klikniciu przycisku  


w polu
tekstowym powinna pojawi si instrukcja SQL, ktr przypisano waciwoci  
"
obiektu  
:
 , 0 3, ,, # .
Wiele klas .NET Framework, a take klas pisanych przez innych programistw, zawiera
przecione konstruktory obiektw. Innymi sowy, istnieje kilka rnych metod tworzenia
nowych instancji klasy, za pomoc konstruktorw przyjmujcych rn liczb argumentw.
Mona wybra wersj, ktra najlepiej odpowiada biecym potrzebom.
Konstruktor obiektu  z listingu 4.2 rni si od konstruktora z listingu 4.1.
W tamtym przykadzie uylimy konstruktora domylnego, ktry nie przyjmuje adnych
argumentw. Nastpnie przypisalimy acuch poczeniowy obiektowi ,
ustawiajc waciwo  1:
' Tworzenie instancji obiektu Connection
 $ #
' Ustawianie acucha poczeniowego
 "$%!$ &'( $ '   $(%

Na listingu 4.2 uylimy konstruktora, ktry przyjmuje acuch poczeniowy jako


argument. Dziki temu moglimy utworzy obiekt i przypisa mu acuch poczeniowy
za pomoc jednego wiersza kodu:
' Tworzenie instancji obiektu Connection
 $ 
%!$ &'( $ '   $(%#

'(
 
 $%  !)* 

!

!%
)%

Podczas przesyania kwerend lub polece do rda danych czsto trzeba przekazywa
wartoci parametrw. Jest to niemal regu podczas wykonywania polece akcji ( ,

 lub   ) i wywoywania procedur skadowanych. Aby speni ten wymg, obiekt
 
zawiera waciwo  , ktra jest obiektem typu  
i zawiera kolekcj obiektw  . Mechanizm ten rwnie jest bardzo podobny do
swojego odpowiednika z ADO 2.X.
Obiekt  (i  ) jest cile zwizany z konkretnym dostawc
danych, wic jest jednym z obiektw, ktre musz by zaimplementowane w kadym
dostawcy danych ADO.NET. Programowanie obiektu    znacznie si rni od programowania obiektw 
   i   
. Pierwszy obsuguje parametry nazwane, a pozostae dwa parametry
pozycyjne. Rnica ta wpywa na sposb definiowania kwerend i parametrw.

Rozdzia 4.  ADO.NET dostawcy danych

161

Zacznijmy od prostej kwerendy parametrycznej na tabeli #  w bazie danych .


Przypumy, e chcemy pobiera nazwiska wszystkich autorw z okrelonego stanu.
Gdybymy uywali dostawcy danych   lub 
, kwerenda wygldaaby tak:
   (  (  (&   $7

Miejscem na parametr jest tutaj znak zapytania. Gdyby kwerenda miaa inne parametry,
rwnie zastpiono by je znakami zapytania. Poszczeglne parametry s odrniane
wedug pozycji; oznacza to, e kolejno dodawania parametrw do obiektu 
 musi dokadnie odpowiada ich kolejnoci w kwerendzie albo procedurze
skadowanej.
Gdybymy natomiast uywali dostawcy danych , kwerenda wygldaaby tak:
   (  (  (&   $8,  

Miejscem na parametr jest tu nazwa specyficznego parametru; dodatkowe parametry rwnie byyby okrelone przez nazwy. Poniewa parametry s odrniane wedug nazw,
mona je dodawa do obiektu   w dowolnej kolejnoci.
Obiekt  mona utworzy jawnie, za pomoc jego konstruktora (to znaczy za
pomoc operatora  ), albo poprzez przekazanie wymaganych parametrw do metody

obiektu   (waciwoci   obiektu  


). Warto te
zauway, e zarwno konstruktor  , jak i metoda

maj kilka przecionych


wersji.
Oto sposb dodawania parametru polecenia poprzez jawne utworzenie obiektu parametru:
 ,    ,  %8,  % * " 9#
,  
$,  
 :(
,   ; ($%%
 ,    ,  #

A oto sposb dodawania parametru polecenia poprzez przekazanie odpowiednich argumentw do metody

:
 ,    %8,  % * " 9#
 ,  8,  #
$,  
 :(
 ,  8,  # ; ($%%

Drugi sposb jest krtszy i zwykle preferowany, chyba e obiekt  bdzie uywany
wielokrotnie.
W wywoaniu metody

trzeba okreli nazw parametru, jego typ i (w razie potrzeby)


dugo. Nastpnie mona ustawi kierunek parametru wejciowy ((), wyjciowy
(), wejciowo-wyjciowy (() albo warto zwrotna ( 4 ). Domylny kierunek to (. Wreszcie, aby okreli warto parametru, naley przypisa
j waciwoci 4  obiektu  . Mona ustawi kilka dodatkowych waciwoci
tego obiektu takich jak  ,  i (- .
Gdybymy uywali dostawcy danych , kod byby niemal identyczny. Zastpilibymy tylko przedrostki 
 przedrostkami  i uyli typu wyliczeniowego  :

162

Visual Basic .NET. Bazy danych. Ksiga eksperta


 ,   ,  %8,  %
* " 9#
,  
$,  
 :(
,   ; ($%%
 ,    ,  #

lub:
 ,    %8,  %
* " 9#
 ,  8,  #
$,  
 :(
 ,  8,  # ; ($%%

Aby przypisa parametrowi warto -, naley uy waciwoci 4  obiektu


-. Oto odpowiedni wiersz kodu:
 ,  %8,  %# ; ($
<( ; (

Zmodyfikujmy kod przycisku  


w sposb pokazany na listingu 4.3. Po uruchomieniu programu i klikniciu przycisku Polecenie wywietlony zostanie tekst kwerendy
oraz nazwa i warto parametru.
!

Kod, ktry przygotowuje obiekty polecenia i parametru oraz wywietla ich wartoci

        
  !"#    
' Tworzenie instancji obiektu Connection
 $ 
%!$ &'( $ '   $(%#
' Tworzenie instancji obiektu Command i obiektu Parameter
    $  
 ,  $ ,  
)(  #
' Otwieranie poczenia
 #
' Ustawianie poczenia i tekstu polecenia w obiekcie Command
 $
   *$  * *)
   *)$
%   (   (&1& $8,  %
'Tworzenie parametru i ustawianie wartoci
 ,     ,  %8,  %

* " 9##
 ,  %8,  %# ; ($%%
' Wypisywanie acucha polecenia
)( *)$%4 5(& 6%+&  3
)( *)$)( *)+&  * +
   *)#+&  3
' Wypisywanie parametrw polecenia i ich wartoci
)( *)$)( *)+%,   6%+
&  3
#!   ,  
)( *)$)( *)+&  * +
 ,  < +%$%+ ; (+&  3
 $
! 

Rozdzia 4.  ADO.NET dostawcy danych

163

Procedury skadowane wywouje si w ten sam sposb z tym, e typem polecenia jest
 
 

 , a nie  
". Nazw procedury skadowanej
naley przypisa waciwoci  
". Zatem wywoanie procedury skadowanej
o nazwie $ # *  , ktra przyjmuje dwuznakowy parametr, wygldaoby tak:
   *$  *  , (
   *)$%=(&> %
 ,    %8,  %
* " 9#
 ,  %8,  %#
$,  
 :(
 ,  %8,  %# ; ($%%

W razie wywoywania procedury skadowanej za porednictwem obiektu 


 

naley uywa standardowych sekwencji unikowych ODBC, zamiast po prostu podawa


nazw procedury skadowanej we waciwoci  
". W sekwencji unikowej
znaki zapytania zastpuj wartoci parametrw. Odpowiednik ODBC powyszego kodu
wygldaby tak:
   *$  *  , (
   *)$%?=(&> 7@%
 ,    %8,  % * " 9#
 ,  %8,  %#
$,  
 :(
 ,  %8,  %# ; ($%%

Jeli procedura skadowana ma warto zwrotn, naley poprzedzi nazw procedury


znakami 5,6, jak w poniszym przykadzie:
   *)$%?7$=(&> 7@%

Jeli procedura skadowana zwraca wyniki, naley okreli kierunek  i odczyta
waciwo 4  parametru po wywoaniu procedury. W poniszym przykadzie okrelono te, e procedura ma warto zwrotn. Poniewa uyto typu ( SQL Servera, nie
trzeba okrela dugoci parametru, gdy z definicji skada si on z czterech bajtw:
 ,     ,  %(%
* :##
 ,  %(%#
$,  
 (; (
 ,     ,  %8,  %
* :##
 ,  %8,  %#
$,  
 ((
' Tutaj naley wywoa procedur skadowan
") ,  %8,  %# ; (#

Jeli parametr jest wartoci zwrotn ( 4 ) procedury skadowanej, powinien
by dodawany jako pierwszy do kolekcji  . Jest to wymagane w przypadku
parametrw   i 
, poniewa jak ju wspomniano maj one charakter
pozycyjny, a warto zwrotna jest przekazywana na pierwszej pozycji. Natomiast
w przypadku parametrw  warto zwrotna moe natomiast zajmowa dowoln
pozycj, poniewa s one rozrniane wedug nazw.

Niebawem wyjanimy, jak wykonywa te polecenia, a wwczas przedstawimy dodatkowe


przykady uycia parametrw.

+
 ! ,
Dotychczas ustawialimy rne waciwoci i parametry obiektu  
, ale jeszcze
nie wykonalimy adnego polecenia! Czas to zrobi. Istniej trzy standardowe sposoby
wykonywania polece zdefiniowanych w obiekcie  
oraz jeden sposb dodatkowy,
dostpny tylko w przypadku obiektw  
:

164

Visual Basic .NET. Bazy danych. Ksiga eksperta




!"-7  wykonuje polecenie SQL, ktre nie zwraca adnych rekordw,

!"  wykonuje polecenie SQL i zwraca pierwsz kolumn

pierwszego wiersza,


!"
 wykonuje polecenie SQL i zwraca wynikowy zestaw
rekordw za porednictwem obiektu  
 ,

!"2
 wykonuje polecenie SQL i zwraca wynikowy zestaw
rekordw w formacie XML za porednictwem obiektu 2
 .

Poniej omwimy trzy pierwsze metody wykonywania polece. W rozdziale 10. zajmiemy si metod !"2
 , kiedy bdziemy omawia zastosowania jzyka
XML w ADO.NET.

' (
Metoda !"-7  to prawdopodobnie najatwiejszy sposb wykonywania polece na rdle danych. Metoda ta umoliwia wykonywanie polece, ktre nie zwracaj
wynikw (zestaww rekordw albo wartoci skalarnych) poza wartoci, ktra okrela
sukces lub niepowodzenie. Jest to rwnie najbardziej wydajna metoda wykonywania
polece. Mona wykonywa te instrukcje SQL lub procedury skadowane, ktre: (1) s
poleceniami   $ lub Data Definition Language (DDL) sucymi do tworzenia lub
modyfikowania struktur bazy danych takich jak tabele, widoki lub procedury skadowane,
(2) s poleceniami aktualizacyjnymi ( , 
 lub   ) sucymi do modyfikowania danych.
Metoda !"-7  zwraca pojedyncz warto cakowit. Znaczenie tej
wartoci zaley od typu wykonywanego polecenia.
Jeli uywane s polecenia   $ lub DDL, ktre modyfikuj struktur bazy danych,
warto zwrotna metody jest rwna 1, jeli operacja przebiega pomylnie. Jeli
uywane s poczenia  , 
 lub   , ktre aktualizuj dane, warto
zwrotna jest rwna liczbie wierszy poddanych operacji. W obu przypadkach warto
zwrotna wynosi 0, jeli operacja zakoczy si niepowodzeniem.

Kontynuujc projekt   )) #, uyjemy obiektw z przestrzeni nazw
  i bdziemy pracowa z baz danych . Za pomoc odpowiedniego polecenia
DDL utworzymy now tabel w tej bazie. Tabela bdzie zawiera odwzorowania midzy
kodami pocztowymi a stanami. Definicje pl tej tabeli bd dopasowane do uywanych
w bazie danych  (innych ni pola w bazie danych -)). Tabela bdzie zawiera
dwa pola jedno na kod pocztowy, a drugie na odpowiadajcy mu stan. Oto instrukcja
SQL, ktra tworzy t tabel:
"%!!&! A 
A & B#'&&
 & 9#'&&#

Formularz * + naley zmodyfikowa w nastpujcy sposb:



Otworzy formularz * + w rodowisku programistycznym Visual Studio.

W lewym grny rogu formularza doda poprzez przecignicie go z zakadki

Windows Forms przybornika.

Rozdzia 4.  ADO.NET dostawcy danych

165


W oknie waciwoci przycisku ustawi waciwo -  na -7 ,
a waciwo " na ' .

Nastpnie do procedury obsugi zdarzenia  nowego przycisku naley doda kod
przedstawiony na listingu 4.4.
!

Kod, ktry tworzy tabel bazy danych za pomoc obiektw z przestrzeni nazw OleDb

  <C(    
  !"#  <C( 
' Tworzenie instancji obiektu Connection
  
$  

%! $C3 3
'!$ &'( $ '   $(%#
   (
 ( ( 
' Tworzenie instancji obiektu Command
   
  $  
  #
' Okrelanie poczenia i tekstu polecenia
 $
   *$  * *)
' Przypisywanie instrukcji SQL, ktra tworzy now tabel
$%"%!!&! A %+
%A & B#'&&%+
% & 9#'&&#%
   *)$
' Otwieranie poczenia przed wywoaniem metody ExecuteNonQuery()
 #
' Kod trzeba umieci w bloku Try-Catch, poniewa nieudane
' wykonanie polecenia powoduje bd czasu wykonania

($ )(<C(#
"  ) )
' Wywietlanie komunikatu o bdzie
 ") &1)  "#
!
' Wywietlanie wynikw polecenia
($DE 
 ") &1%,/ -1 F%#
!
 ") &1%G  1 -2%#
!
 #
! 

Kiedy projekt   )) # zostanie uruchomiony, a przycisk Wykonanie
kliknity po raz pierwszy, powinno pojawi si okno z informacj o pomylnym wykonaniu polecenia. Aby sprawdzi, czy tabela zostaa utworzona, mona obejrze list tabel
w bazie danych  za pomoc narzdzia Server Explorer w Visual Studio (zobacz rozdzia 1.) albo za pomoc programu SQL Server Enterprise Manager (zobacz rozdzia 3.).
Jeli przycisk Wykonanie zostanie kliknity ponownie, pojawi si dwa okna z komunikatami. Pierwsze okno zawiera tekst pochodzcy z wygenerowanego wyjtku; jest ono
wywietlane przez blok  i podaje przyczyn wystpienia bdu. W tym przypadku
polecenie zostao odrzucone, poniewa w bazie danych znajduje si ju tabela o takiej
nazwie. Nastpnie zostanie wywietlone drugie okno z komunikatem o niepowodzeniu
podczas wykonywania polecenia.

166

Visual Basic .NET. Bazy danych. Ksiga eksperta


W ten sam sposb mona utworzy widok albo procedur skadowan. Aby utworzy
widok o nazwie !80%), ktry zwraca list stanowisk oraz nazwisk pracownikw (posortowan wedug stanowiska), naley zmieni instrukcj SQL z listingu 4.3
w nastpujcy sposb:
$%"%!!!) H!1 %+
% !&!"* ,EII,  <*0 0 %+
%    %+
%#%*0:<< H :<%+
%0 0 $ 0 %+
%%!%+0 0 %

Aby doczy do definicji widoku klauzul  , ! w celu posortowania wynikw,


trzeba doda klauzul  w instrukcji
.

Aby utworzy procedur skadowan, ktra przyjmuje jeden parametr i zwraca pojedyncz
warto, naley zmieni instrukcj SQL w sposb pokazany na listingu 4.5.
!

Kod zawierajcy instrukcj SQL, ktra tworzy procedur skadowan AuthorsInState1
$%"%!!, 
J (&: E8 & 9#%+
% 
3 8(%+
% !&!"8($ J<*K##%* (&%+
%)!%! $8 %+
% *J<8(#%

Cho metoda !"-7  zwraca tylko jedn warto, jeli zdefiniujemy parametry
typu  lub  4 , zostan one prawidowo wypenione danymi parametru.
Jest to bardziej wydajne ni polecenie, ktre zwraca zbir wynikw albo warto skalarn.

Rozwamy teraz drugi typ polecenia niekwerendowego polecenie aktualizujce baz


danych, czyli instrukcj  ,   lub 
. Polecenia te zwykle wymagaj okrelenia parametrw, zwaszcza jeli s wykonywane z wykorzystaniem procedur skadowanych (a powinny ze wzgldu na wydajno).
Przypumy, e wydawca, ktry zaimplementowa baz danych , jest w dobrym
nastroju i postanowi zwikszy tantiemy wypacane autorom. Jeli do formularza * +
w projekcie   )) # dodamy kolejny przycisk i pole tekstowe, gwny
ksigowy wydawcy bdzie mg wprowadzi odsetek, o jaki zostan zwikszone tantiemy,
jako parametr polecenia 9 !. W tym celu naley wykona ponisze czynnoci:

Doda kolejny przycisk tu pod przyciskiem -7 .

W oknie waciwoci przycisku ustawi waciwo -  na 9
,
a waciwo " na  & : .

Pod nowym przyciskiem doda pole tekstowe poprzez przecignicie go

z zakadki Windows Forms przybornika.



W oknie waciwoci pola tekstowego ustawi waciwo -  na " +,
a waciwo " na ;. Dziki ustawieniu wartoci pola tekstowego na 0

uytkownik, ktry uruchomi program i zapomni o ustawieniu tej wartoci


przed klikniciem przycisku Aktualizacja, nie spowoduje uszkodzenia danych
albo bdu czasu wykonania.

Rozdzia 4.  ADO.NET dostawcy danych

167


Doda kod nowego przycisku (zobacz listing 4.6).
!

Kod, ktry aktualizuje baz danych, wykorzystujc instrukcj SQL z parametrem

  J     
  !"#  J  
 ( ( 
' Tworzenie instancji obiektu Connection
 $ 
%!$ &'( $ '   $(%#
' Tworzenie instancji obiektu Command
    $   #
)(  #
' Okrelanie poczenia i tekstu polecenia
 $
   *$  * *)
   *)$%'!&  ! $ L8  E%
' Tworzenie parametru i ustawianie jego wartoci
 ,     ,  %8  E%
* :##
 ,  %8  E%#
$,  
 :(
 ,  %8  E%# ; ($; ),  E *)#
' Otwieranie poczenia przed wywoaniem funkcji ExecuteNonQuery()
 #
($ )(<C(#
 ") &1%A ( /1 %+(
+% M1%%   1M1 &%#
 #
! 

Aby zaktualizowa tabel tantiem, naley uruchomi projekt   )) #,
wpisa warto cakowit w polu tekstowym parametru i klikn przycisk Aktualizuj.
Powinno pojawi si okno komunikatu z informacj o liczbie zaktualizowanych rekordw.
Mona zweryfikowa ten wynik poprzez uruchomienie programu SQL Server Enterprise
Manager i wywietlenie danych z tabeli #
przed wykonaniem tego przykadowego
programu i po nim.
T sam aktualizacj mona wykona za pomoc procedury skadowanej. Zalet procedur
skadowanych jest to, e s one bardziej wydajne i znajduj si w centralnej lokalizacji.
Maj one jednak t wad, e w skad zespou programistw musi wchodzi administrator baz danych, a przynajmniej kto, kto umie pisa procedury skadowane. W duych
organizacjach moe upyn sporo czasu, zanim uda si namwi administratora baz
danych do zmodyfikowania procedury skadowanej. Tym, ktrzy mog zrobi to sami,
nie zajmie to wicej ni minut. Procedur skadowan mona doda za pomoc programw SQL Server Enterprise Manager albo SQL Query Analyzer w sposb opisany
w rozdziale 3. Mona rwnie uy projektu   )) # i zmieni instrukcj SQL, jak zrobilimy to w jednym z poprzednich przykadw.
Procedura skadowana powinna wyglda tak:
"%!!, 
J J  
8  

J,
* &  ! $ L8  

168

Visual Basic .NET. Bazy danych. Ksiga eksperta


Aby wywoa procedur skadowan, na listingu 4.6 trzeba zmieni waciwoci  

 i  
" obiektu  
. Odpowiednie wiersze kodu powinny wyglda tak:
   *$  *  , (
   *)$%J  %

Uruchomienie zmodyfikowanego programu powinno da te same wyniki. Teraz aktualizacja jest wykonywana przez procedur skadowan, a nie przez instrukcj SQL zapisan
w kodzie aplikacji.

' ) 

Czasem trzeba wykona polecenie bazy danych, ktre zwraca warto skalarn to znaczy
pojedyncz. Typowym przykadem takich polece s instrukcje SQL, ktre wykonuj
funkcj agregacyjn, takie jak 9 lub 9-. Innym przykadem s tabele wyszukiwania,
ktre zwracaj pojedyncz warto, a take polecenia, ktre zwracaj warto logiczn.
Metoda !"  wykonuje polecenie i zwraca pierwsz kolumn pierwszego wiersza
w zbiorze wynikw. Pozostae kolumny i wiersze s ignorowane.
Dodajmy ponisz procedur skadowan do bazy danych :
"%!!%"!'%!(&: 9
8  E& 9#

!&!" J<*K##%* (&)!%! $8  E

Procedura # ( < przyjmuje parametr w postaci dwuliterowego kodu nazwy
stanu i zwraca liczb autorw mieszkajcych w okrelonym stanie. Jest ona funkcjonalnie
rwnowana procedurze # ( + pokazanej na listingu 4.5, ale zwraca zbir
wynikw zamiast pojedynczej wartoci.
Kiedy uywamy metody !"  zamiast !"-7  i przekazujemy
warto skalarn jako parametr typu  4 , wydajno aplikacji nieco si
zmniejsza. Po co wic uywa metody !"  ? Jest ona prostsza i mniej
pracochonna, poniewa nie trzeba definiowa parametrw zarwno w poleceniu,
jak i w wywoujcym je kodzie.

Aby wywoa t procedur za pomoc obiektw dostawcy danych 


, naley wykona
ponisze czynnoci:

Doda kolejny przycisk tu pod polem tekstowym " +.

W oknie waciwoci przycisku ustawi waciwo -  na !"  ,
a waciwo " na Warto skalarna.

Doda kod nowego przycisku (zobacz listing 4.7).
!

Kod, ktry pobiera warto skalarn z procedury skadowanej, wykorzystujc obiekty
dostawcy danych Odbc

   )(      
,,  !"#   )(   
 ( ( 

Rozdzia 4.  ADO.NET dostawcy danych

169

' Tworzenie instancji obiektu Connection


  $  
%
:; $?C3!@'!$ &'( $ '   $(%#
' Tworzenie instancji obiektu Command
     $    #
)(  #
' Okrelanie poczenia i tekstu polecenia
 $
   *$  *  , (
   *)$%? (&: 97#@%
' Tworzenie parametru i ustawianie jego wartoci
 ,    %8  E% * " 9#
 ,  %8  E%# ; ($),  E *)
' Otwieranie poczenia przed wywoaniem metody ExecuteScalar()
 #
($ )(  #
 ") &1%3/  (M16%+(% 
 1M1 &%#
 #
! 

Teraz naley uruchomi aplikacj i wprowadzi dwuznakowy kod nazwy stanu w polu
tekstowym parametru. Po klikniciu przycisku Warto skalarna powinno pojawi si
okno komunikatu z informacj o liczbie autorw mieszkajcych w danym stanie. Mona
zweryfikowa ten wynik za pomoc programu SQL Server Enterprise Manager poprzez
wywietlenie danych z tabeli # .
Domylne dane w tabeli  powinny da wynik 2 w przypadku stanu UT i 15
w przypadku stanu CA.

' *+
Najlepsze (i najwaniejsze) zostawilimy na koniec. Metod !"
 wywouje
si po to, aby wykona polecenie, ktre zwraca zestaw wierszy (rekordw). W wikszoci
aplikacji bazodanowych wanie ta metoda wykonywania polece jest uywana najczciej. Wykonuje ona polecenie, ktre zwraca wiersze danych za porednictwem obiektu
 
 . Wiersze skanuje si kolejno, zaczynajc od pierwszego. W nastpnym podrozdziale podamy wicej informacji o obiekcie  
 i podamy odpowiednie przykady.

You might also like