Professional Documents
Culture Documents
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
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
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
Spis treci
*
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
(/
!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
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
"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
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).
151
#$$
%&
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:
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
Klasy ADO.NET
w strukturze
.NET Framework
!
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.
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
na:
&
Kady dostawca danych zawiera cztery kluczowe obiekty, ktre s wymienione w tabeli 4.1.
Kluczowe obiekty dostawcw danych
Tworzy pomost midzy obiektem
a rdem danych, aby umoliwi pobieranie
i zapisywanie danych
,
,
,
.
,
,
,
.
155
,
,
,
.
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
.
156
),
#.
Przecign przycisk z zakadki Windows Forms przybornika do grnego
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
157
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
mona napisa:
' Wywietlanie stanu poczenia
)( *)$)( *)+%,-./01%+
*"+& 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.
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.
160
'(
$% !)*
!
!%
)%
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.
161
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
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
162
lub:
,
%8,%
* " 9#
,8,#
$,
:(
,8,# ;($%%
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,%# ;($%%
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.
+
!,
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
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#'&&#
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
$
%!
$C33
'!$&'(
$'
$(%#
(
((
' 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%,/-1F%#
!
") &1%G1
-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
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.
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
$
*$
* *)
*)$%'!&
!$L8E%
' Tworzenie parametru i ustawianie jego wartoci
,
,%8E%
* :##
,%8E%#
$,
:(
,%8E%# ;($;),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
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
8E&9#
!&!"J<*K##%*(&)!%!$8E
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.
169
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.