Visual Basic .NET. Bazy danych. Księga eksperta

834 views

Published on

Zaprojektuj i napisz wydajne aplikacje bazodanowe, korzystając z Visual Basic .NET

* Opracuj schemat bazy danych, stwórz więzy integralności i zastosuj język SQL do manipulowania danymi
* Poznaj możliwości 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 większości aplikacji biznesowych. Jednak sama baza danych to nie wszystko -- należy zapewnić osobom korzystającym ze zgromadzonych w niej informacji wygodny sposób dostępu do nich. W tym celu pisane są narzędzia służące do manipulacji danymi i wyświetlania ich. Dzięki technologii .NET i możliwościom oferowanym przez język Visual Basic .NET stworzenie aplikacji korzystającej z zasobów zgromadzonych w bazie danych nie nastręcza problemów, jednak mimo to należy podejść do tego zadania w odpowiedni sposób. Schemat bazy danych, odpowiednia konstrukcja zapytań, właściwe zastosowanie obiektów komunikujących się z bazą -- to elementy, które należy wziąć pod uwagę, przystępując do pracy nad aplikacją.

Książka "Visual Basic .NET. Bazy danych. Księga eksperta" to kompendium wiedzy dla programistów wykorzystujących Visual Basic .NET do tworzenia aplikacji opartych na bazach danych. Przedstawia zasady projektowania i pisania aplikacji WinForms, stron WebForms oraz usług Web Services w oparciu o bazę danych MS SQL Server 2000. Opisuje zasady stosowania technologii ADO.NET do połączenia aplikacji z tabelami w bazie i manipulowania zgromadzonymi w nich danymi.

* Schemat bazy danych, relacje, więzy integralności i normalizacja danych
* Konstruowanie zapytań w języku SQL
* Dostęp do bazy z poziomu aplikacji WinForms
* Zastosowanie bazy MS SQL Server 2000 w aplikacjach bazodanowych
* Podstawy technologii ADO.NET
* Stosowanie obiektów DataSet i DataAdapter
* Korzystanie z języka XML
* Tworzenie usług WebServices

Jeśli chcesz szybko i efektywnie tworzyć aplikacje bazodanowe w oparciu o technologię .NET, w tej książce znajdziesz wszystkie niezbędne do tego informacje.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
834
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Visual Basic .NET. Bazy danych. Księga eksperta

  1. 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Visual Basic .NET. Bazy danych. Ksiêga eksperta KATALOG KSI¥¯EK Autor: Jeffrey McManus T³umaczenie: Miko³aj Szczepaniak (rozdz. 8 – 12), KATALOG ONLINE Grzegorz Werner (przedmowa, rozdz. 1 – 7) ISBN: 83-7197-803-0 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: Database Access with Visual Basic.NET Format: B5, stron: 400 TWÓJ KOSZYK Przyk³ady na ftp: 1422 kB DODAJ DO KOSZYKA Zaprojektuj i napisz wydajne aplikacje bazodanowe, korzystaj¹c z Visual Basic .NET CENNIK I INFORMACJE • Opracuj schemat bazy danych, stwórz wiêzy integralno ci i zastosuj jêzyk SQL do manipulowania danymi • Poznaj mo¿liwo ci systemu MS SQL Server 2000 ZAMÓW INFORMACJE i wykorzystaj go w swoich aplikacjach O NOWO CIACH • Zastosuj technologiê ADO.NET i Web Services w aplikacjach napisanych w Visual Basic .NET ZAMÓW CENNIK Bazy danych to podstawa wiêkszo ci aplikacji biznesowych. Jednak sama baza danych to nie wszystko — nale¿y zapewniæ osobom korzystaj¹cym ze zgromadzonych w niej CZYTELNIA informacji wygodny sposób dostêpu do nich. W tym celu pisane s¹ narzêdzia s³u¿¹ce do manipulacji danymi i wy wietlania ich. Dziêki technologii .NET i mo¿liwo ciom FRAGMENTY KSI¥¯EK ONLINE oferowanym przez jêzyk Visual Basic .NET stworzenie aplikacji korzystaj¹cej z zasobów zgromadzonych w bazie danych nie nastrêcza problemów, jednak mimo to nale¿y podej æ do tego zadania w odpowiedni sposób. Schemat bazy danych, odpowiednia konstrukcja zapytañ, w³a ciwe zastosowanie obiektów komunikuj¹cych siê z baz¹ — to elementy, które nale¿y wzi¹æ pod uwagê, przystêpuj¹c do pracy nad aplikacj¹. Ksi¹¿ka „Visual Basic .NET. Bazy danych. Ksiêga eksperta” to kompendium wiedzy dla programistów wykorzystuj¹cych Visual Basic .NET do tworzenia aplikacji opartych na bazach danych. Przedstawia zasady projektowania i pisania aplikacji WinForms, stron WebForms oraz us³ug Web Services w oparciu o bazê danych MS SQL Server 2000. Opisuje zasady stosowania technologii ADO.NET do po³¹czenia aplikacji z tabelami w bazie i manipulowania zgromadzonymi w nich danymi. Wydawnictwo Helion • Schemat bazy danych, relacje, wiêzy integralno ci i normalizacja danych ul. Chopina 6 • Konstruowanie zapytañ w jêzyku SQL 44-100 Gliwice • Dostêp do bazy z poziomu aplikacji WinForms tel. (32)230-98-63 • Zastosowanie bazy MS SQL Server 2000 w aplikacjach bazodanowych e-mail: helion@helion.pl • Podstawy technologii ADO.NET • Stosowanie obiektów DataSet i DataAdapter • Korzystanie z jêzyka XML • Tworzenie us³ug WebServices Je li chcesz szybko i efektywnie tworzyæ aplikacje bazodanowe w oparciu o technologiê .NET, w tej ksi¹¿ce znajdziesz wszystkie niezbêdne do tego informacje.
  2. 2. 5RKU VTG EK 1 #WVQTCEJ 2TGFOQYC 4QFKC 2QFUVCYQYG KPHQTOCELG Q DCCEJ FCP[EJ 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ą obiektów...................................................................................... 22 Typy danych ........................................................................................................................................ 23 Tworzenie schematu bazy danych ....................................................................................................... 23 Tworzenie bazy danych za pomocą programu Visual Studio............................................................. 25 Określanie indeksów i kluczy podstawowych ............................................................................... 28 Tworzenie diagramu bazy danych................................................................................................. 30 Tworzenie i modyfikowanie schematu bazy danych za pomocą programu Microsoft Visio......... 32 Relacje ................................................................................................................................................. 38 Utrzymywanie spójności danych dzięki integralności referencyjnej ............................................. 40 Testowanie integralności referencyjnej za pomocą narzędzia 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 u ytkownika w aplikacji Windows Forms ......................................................... 47 Łączenie się z bazą danych i praca z rekordami ............................................................................ 47 Tworzenie aplikacji do przeglądania danych................................................................................. 48 Wiązanie programowe................................................................................................................... 51 Kontrolki danych w .NET ............................................................................................................. 52 Aktualizowanie rekordów w przeglądarce danych ........................................................................ 52 Tworzenie nowych rekordów w formularzu powiązanym z danymi ............................................. 54 Usuwanie rekordów z powiązanego formularza............................................................................ 55 Sprawdzanie poprawności danych w powiązanym formularzu ..................................................... 55 Sprawdzanie poprawności na poziomie mechanizmu bazy danych............................................... 56 Podsumowanie..................................................................................................................................... 57 Pytania i odpowiedzi ..................................................................................................................... 57
  3. 3. 6 Visual Basic .NET. Bazy danych. Księga eksperta 4QFKC -YGTGPF[ K RQNGEGPKC 53. Co to jest kwerenda?............................................................................................................................ 59 Testowanie kwerend za pomocą narzędzia Server Explorer................................................................ 60 Pobieranie rekordów za pomocą klauzuli SELECT............................................................................. 62 Wyznaczanie źródła rekordów za pomocą klauzuli FROM................................................................. 63 Określanie kryteriów za pomocą klauzuli WHERE............................................................................. 64 Operatory w klauzulach WHERE.................................................................................................. 65 Sortowanie kryteriów za pomocą klauzuli ORDER BY...................................................................... 67 Sortowanie w porządku malejącym............................................................................................... 67 Sortowanie według wielu pól ........................................................................................................ 68 Wyświetlanie początku lub końca zakresu za pomocą operatora TOP ................................................ 68 Kwerendy, które zwracają określony odsetek rekordów ............................................................... 69 Sprzęganie tabel w kwerendzie............................................................................................................ 69 Zapisywanie sprzę enia w języku SQL......................................................................................... 70 Pobieranie dodatkowych danych za pomocą sprzę enia zewnętrznego ........................................ 71 Wykonywanie obliczeń w kwerendach ............................................................................................... 73 Tworzenie aliasów nazw pól za pomocą klauzuli AS.......................................................................... 74 Kwerendy grupujące i podsumowujące dane....................................................................................... 75 U ywanie klauzuli HAVING w celu określenia kryteriów kwerendy grupującej ......................... 76 Funkcja SUM ................................................................................................................................ 77 Inne funkcje agregacyjne SQL-a ................................................................................................... 77 Kwerendy składające ........................................................................................................................... 79 Podkwerendy ....................................................................................................................................... 79 Manipulowanie danymi za pomocą SQL............................................................................................. 80 Polecenia aktualizacji .................................................................................................................... 81 Polecenia usunięcia ....................................................................................................................... 82 Polecenia wstawienia .................................................................................................................... 82 Tworzenie tabel za pomocą instrukcji SELECT INTO ................................................................. 83 Język definiowania danych.................................................................................................................. 83 Tworzenie elementów bazy danych za pomocą polecenia CREATE ............................................ 84 Dodawanie ograniczeń do tabel..................................................................................................... 84 Tworzenie indeksu za pomocą polecenia CREATE INDEX......................................................... 85 Usuwanie tabel i indeksów za pomocą polecenia DROP .............................................................. 86 Modyfikowanie definicji tabeli za pomocą polecenia ALTER ........................................................ 86 Podsumowanie..................................................................................................................................... 87 Pytania i odpowiedzi ..................................................................................................................... 87 4QFKC 53. 5GTXGT YRTQYCFGPKG 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 Określanie sposobu uruchamiania SQL Servera............................................................................ 96 Podstawowe informacje o obsłudze 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 Dostęp do bazy danych za pomocą programu SQL Query Analyzer........................................... 106
  4. 4. Spis treści 7 Sterowanie dostępem do danych za pomocą widoków................................................................ 110 Tworzenie i uruchamianie procedur składowanych .................................................................... 114 Wyświetlanie tekstu istniejącego widoku lub procedury składowanej ........................................ 118 Tworzenie wyzwalaczy ............................................................................................................... 119 Przypadek biznesowy 3.1. Tworzenie procedury wyzwalanej, która umo liwia wyszukiwanie wyrazów o podobnej wymowie ........................................................................ 120 Zarządzanie kontami i bezpieczeństwem za pomocą programu SQL Server Enterprise Manager...122 Określanie atrybutów bezpieczeństwa za pomocą programu SQL Query Analyzer.................... 128 Usuwanie obiektów z bazy danych ............................................................................................. 130 Przypadek biznesowy 3.2. Generowanie skryptu tworzącego bazę danych ................................ 131 Podsumowanie................................................................................................................................... 146 Pytania i odpowiedzi ................................................................................................................... 146 4QFKC #10'6 FQUVCYE[ FCP[EJ Przegląd technologii ADO.NET ........................................................................................................ 149 Motywacja i filozofia .................................................................................................................. 150 Porównanie ADO.NET z klasyczną technologią ADO (ADO 2.X) ................................................. 151 Obiekty ADO.NET w ogólnej strukturze .NET Framework ....................................................... 151 Interfejsy aplikacyjne .................................................................................................................. 152 Przegląd obiektów dostawczych .NET .............................................................................................. 153 SqlClient...................................................................................................................................... 153 OleDb .......................................................................................................................................... 153 Odbc............................................................................................................................................ 153 Kluczowe obiekty........................................................................................................................ 154 Obiekt Connection............................................................................................................................. 155 Obiekt Command............................................................................................................................... 159 U ywanie obiektu Command w połączeniu z parametrami i procedurami składowanymi.......... 160 Wykonywanie poleceń ................................................................................................................ 163 Obiekt DataReader ............................................................................................................................ 169 U ywanie komponentów projektowych Connection i Command...................................................... 172 Inne obiekty dostawców danych........................................................................................................ 173 Przypadek biznesowy 4.1. Pisanie procedury, która archiwizuje wszystkie zamówienia z określonego roku ................................................................................................................... 174 Podsumowanie................................................................................................................................... 179 Pytania i odpowiedzi ................................................................................................................... 179 4QFKC #10'6 QDKGMV CVC5GV Zastosowania i komponenty obiektu DataSet.................................................................................... 181 Wypełnianie i modyfikowanie obiektu DataSet ................................................................................ 183 Definiowanie schematów DataTable........................................................................................... 183 Dodawanie danych do obiektu DataTable ................................................................................... 187 Aktualizowanie obiektu DataSet ................................................................................................. 188 Dostęp do danych w obiekcie DataTable .................................................................................... 191 Relacje między tabelami.............................................................................................................. 196 Ograniczenia tabel....................................................................................................................... 199 Korzystanie z komponentu DataSet................................................................................................... 203 Podsumowanie................................................................................................................................... 209 Pytania i odpowiedzi ................................................................................................................... 209
  5. 5. 8 Visual Basic .NET. Bazy danych. Księga eksperta 4QFKC #10'6 QDKGMV CVC#FCRVGT Wypełnianie obiektu DataSet ze źródła danych................................................................................. 212 Aktualizowanie źródła danych........................................................................................................... 216 Ustawianie poleceń aktualizacyjnych.......................................................................................... 218 Przypadek biznesowy 6.1. Łączenie wielu powiązanych tabel.................................................... 231 Podsumowanie................................................................................................................................... 236 Pytania i odpowiedzi ................................................................................................................... 236 4QFKC #10'6 FQFCVMQYG HWPMELG K VGEJPKMK Wykrywanie konfliktów współbie ności........................................................................................... 237 Odwzorowania nazw tabel i kolumn.................................................................................................. 241 Obiekty DataView ............................................................................................................................. 243 Przypadek biznesowy 7.1. Łączenie danych pochodzących z ró nych źródeł............................. 249 Obiekty DataSet ze ścisłą kontrolą typów ......................................................................................... 253 Podsumowanie................................................................................................................................... 258 Pytania i odpowiedzi ................................................................................................................... 258 4QFKC 2TQLGMV[ DC FCP[EJ Y 8KUWCN $CUKE 0'6 Tworzenie projektów baz danych ...................................................................................................... 259 Odwołania do baz danych.................................................................................................................. 261 Skrypty .............................................................................................................................................. 262 Skrypty tworzące......................................................................................................................... 263 Skrypty zmieniające .................................................................................................................... 266 Wykonywanie skryptów.............................................................................................................. 269 Pliki poleceń................................................................................................................................ 270 Kwerendy .......................................................................................................................................... 275 Podsumowanie................................................................................................................................... 278 Pytania i odpowiedzi ................................................................................................................... 279 4QFKC ,ú[M :/. K RNCVHQTOC 0'6 Przegląd technologii XML ................................................................................................................ 282 Rodzina technologii XML........................................................................................................... 284 XML i dostęp do danych ............................................................................................................. 286 Klasy obsługujące XML na platformie .NET .................................................................................... 287 Praca w oparciu o obiektowy model dokumentu......................................................................... 288 Stosowanie języka XPATH......................................................................................................... 289 Rozszerzanie systemu SQL Server o SQLXML 3.0 oraz IIS ............................................................ 292 Instalacja i konfiguracja rozszerzenia SQLXML 3.0 .................................................................. 292 Konfigurowanie wyników ........................................................................................................... 299 Stosowanie standardów XML, XSLT oraz SQLXML podczas tworzenia raportów ......................... 299 Podsumowanie................................................................................................................................... 301 Pytania i odpowiedzi ................................................................................................................... 302 4QFKC 6GEJPQNQIKC #10'6 K Lú[M :/. Podstawowe operacje odczytu i zapisu dokumentów XML .............................................................. 306 Odczytywanie dokumentów XML .............................................................................................. 306 Zapisywanie dokumentów XML ................................................................................................. 310 Format DiffGrams ....................................................................................................................... 316 Przykład biznesowy 10.1. Przygotowywanie plików XML dla partnerów biznesowych ............ 322
  6. 6. Spis treści 9 Tworzenie obiektu XmlReader na podstawie obiektu Command...................................................... 335 Stosowanie obiektu XmlDataDocument............................................................................................ 337 Podsumowanie................................................................................................................................... 340 Pytania i odpowiedzi ................................................................................................................... 340 4QFKC 5VTQP[ 9GD(QTO #RNKMCELG DC FCP[EJ Y[MQT[UVWLæEG VGEJPQNQIKú #520'6 Przegląd technologii ASP.NET ......................................................................................................... 343 Kontrolki HTML kontra kontrolki serwera ................................................................................. 344 Dodatkowe własności technologii ASP.NET .............................................................................. 345 Uzyskiwanie dostępu do bazy danych za pośrednictwem ASP.NET................................................. 346 Dodawanie u ytkownika ASPNET do grupy u ytkowników systemu SQL Server .................... 347 Opcja TRUSTED_CONNECTION w praktyce .......................................................................... 353 Praca z kontrolką DataGrid ......................................................................................................... 356 Poprawa wydajności aplikacji baz danych opartych na technologii ASP.NET za pomocą procedur składowanych ................................................................................................ 358 Podsumowanie................................................................................................................................... 361 Pytania i odpowiedzi ................................................................................................................... 361 4QFKC 7U WIK 9GD 5GTXKEGU K VGEJPQNQIKG YCTUVYæ RQ TGFPKæ Stosowanie warstwy pośredniej dla zapewnienia logiki prezentacji.................................................. 364 Wykorzystanie danych w warstwie pośredniej ................................................................................ 367 Tworzenie komponentów wielokrotnego u ytku dla warstwy pośredniej................................... 368 Wykorzystywanie komponentów pochodzących z innej aplikacji ......................................... 371 Udostępnianie obiektów za pośrednictwem usług Web Services ...................................................... 373 Udostępnianie istniejącego obiektu za pośrednictwem usługi Web Service................................ 375 Programowy dostęp do usług Web Services................................................................................ 377 Zakończenie....................................................................................................................................... 380 Podsumowanie................................................................................................................................... 380 Pytania i odpowiedzi ................................................................................................................... 380 5MQTQYKF
  7. 7. 4QFKC #10'6 FQUVCYE[ FCP[EJ Czasem mo na odnieść wra enie, e kiedy programista budzi się rano, ju czeka na niego nowy (i odmienny) przygotowany przez Microsoft model dostępu do baz danych. W niniej- szym rozdziale skupimy się na jego najnowszym wcieleniu — ADO.NET. Najpierw wyjaśnimy, dlaczego powstał ten model dostępowy i zastanowimy się, czy jego wpro- wadzenie było uzasadnione. Następnie przedstawimy przegląd modelu ADO.NET i jego ogólnej architektury. Celem tego rozdziału jest przygotowanie Czytelników do pracy z ADO.NET. Musimy zatem omówić podstawy jego działania i dokładniej przyjrzeć się najwa niejszym obiektom dostawcy danych ADO.NET — %QPPGEVKQP, %QOOCPF, 2CTCOGVGT i CVC4GCFGT. W roz- działach 5., 6. i 7. zajmiemy się bardziej zaawansowanymi i interesującymi obiektami, które oferuje ADO.NET. Wszystkie one współdziałają z obiektem CVC5GV — centralnym elementem technologii ADO.NET. 2TGINæF VGEJPQNQIKK #10'6 Ci, którzy ju od pewnego czasu tworzą aplikacje bazodanowe za pomocą Visual Basica, przywykli do tego, e Microsoft co kilka lat wprowadza nowy, ulepszony model dostępu do danych. Oprócz kolejnego trzyliterowego skrótu pojawia się nowy interfejs API i model obiektowy, które trzeba poznać i opanować. W ostatnich latach programiści uczyli się kolejno modeli ODBC, DAO, RDO i ADO, a obecnie mają do czynienia z ADO.NET. Po wprowadzeniu ka dej nowej technologii programista musi przestudiować jej cele i zało- enia projektowe, a następnie zadać sobie pytanie: czy ja i mój zespół powinniśmy prze- stawić się na tę technologię? W większości przypadków odpowiedź brzmi twierdząco, chyba e programista pracuje nad projektem, którego obecne i przyszłe wymagania nie mają związku z nowymi cechami i funkcjami technologii. Zdarza się to rzadko, choć trzeba przyznać, e dostępność technologii RDO (Remote Data Object) rzeczywiście nie miała wpływu na projekty wykorzystujące mechanizm JET (MDB) (technologia DAO jest ciągle lepszą metodą dostępu do baz danych MDB).
  8. 8. 150 Visual Basic .NET. Bazy danych. Księga eksperta /QV[YCELC K HKNQQHKC Zadajmy więc zasadnicze pytanie: do czego potrzebny jest nowy model dostępu do danych? Mo na na nie odpowiedzieć sloganem reklamowym Toyoty z lat 70.: „Dostaliście, o co prosiliście”. ADO.NET oferuje wiele rzeczy, których programiści domagali się od czasu wprowadzenia technologii ADO. To prawda, e z czasem dodano do ADO funkcje takie jak rozłączone zestawy rekordów oraz obsługa XML. Problem polega na tym, e funkcje te są właśnie dodatkami. Uzupełniają one pierwotny projekt, więc są niekompletne i nie- wygodne w u yciu. Klasyczna (oparta na modelu COM) technologia ADO zawiera pojedynczy obiekt, TGEQTF UGV, którego u ywa się do najró niejszych celów. W zale ności od ró nych parametrów konfiguracyjnych — takich jak typ kursora, lokalizacja kursora i typ blokowania — obiekt TGEQTFUGV działa inaczej i pełni ró ne funkcje. W ADO.NET poszczególne funkcje zostały przypisane oddzielnym obiektom, których mo na u ywać niezale nie albo w połączeniu z innymi. Dzięki temu programiści mogą korzystać z obiektów zoptymalizowanych pod kątem konkretnej funkcji i niezawierają- cych dodatkowego „baga u”. Pomimo to ró ne obiekty dobrze ze sobą współpracują, zapewniając większą funkcjonalność. 1DU WIC CRNKMCELK TQRTQUQP[EJ K TQ æEQP[EJ ADO.NET oferuje doskonałą i elastyczną obsługę aplikacji rozproszonych między wie- loma komputerami (serwerami baz danych, serwerami aplikacji i klienckimi stacjami roboczymi). Szczególnie godna uwagi jest obsługa aplikacji rozłączonych (trój- lub wie- lowarstwowych), która minimalizuje współbie ne obcią enie i blokowanie zasobów w serwerze baz danych. Rezultatem jest większa skalowalność — mo liwość obsługi większej liczby u ytkowników jednocześnie poprzez stopniową rozbudowę sprzętu. Jest to istotne zwłaszcza w aplikacjach WWW. 2G PC QDU WIC Lú[MC :/. Choć klasyczna technologia ADO mo e zapisywać i odczytywać dane w formacie XML, to rzeczywisty format jest raczej niezwykły i niewygodnie się z nim pracuje. Ponadto obsługę XML dodano do ADO na stosunkowo późnym etapie, więc jest ona dość ogra- niczona i nieelastyczna. W przypadku ADO.NET obsługa XML od początku stanowiła zasadniczy element projektu. Filozofia ADO.NET głosi, e „dane to dane” — bez względu na źródło ich pochodzenia mo na przetwarzać je jako dane relacyjne albo hierarchiczne w zale ności od potrzeb albo w zale ności od u ywanego narzędzia programistycznego. Co więcej, języka XML u ywa się jako formatu transmisji danych między ró nymi war- stwami i komputerami. Nie tylko eliminuje to problem przepuszczania wywołań COM przez zapory sieciowe, ale równie ułatwia współdzielenie danych z aplikacjami, które działają na platformach innych ni Windows (poniewa ka dy system mo e przetwarzać tekstowe dane XML).
  9. 9. Rozdział 4. ADO.NET — dostawcy danych 151 +PVGITCELC 0'6 (TCOGYQTM ADO.NET nie jest po prostu następną wersją ADO. Technologia ta została zaprojekto- wana i zaimplementowana jako element .NET Framework. Oznacza to, e działa jako kod zarządzany (ang. Managed Code), a wszystkie jej obiekty zachowują się zgodnie z tym, czego przywykliśmy oczekiwać od obiektów .NET. Jest tak e częścią standardo- wego pakietu .NET Framework, co pozwala uniknąć kłopotów z wersjami, z którymi programiści ADO musieli zmagać się w przeszłości. 2TQITCOQYCPKG Y UV[NW #1 Choć technologię ADO.NET zaprojektowano i zaimplementowano jako część .NET Fra- mework, wiele jej elementów powinno wyglądać znajomo dla programistów klasycznej technologii ADO. Nawet w przypadku funkcji nowych lub zrealizowanych w odmienny sposób doświadczony programista ADO będzie mógł wykorzystać nabytą wcześniej wiedzę, aby szybko zrozumieć i zastosować obiekty ADO.NET. 2QTÎYPCPKG #10'6 MNCU[EPæ VGEJPQNQIKæ #1 #1 : Ró nice między ADO.NET a klasyczną technologią ADO mo na streścić w następujący sposób: Klasyczna technologia ADO została zaprojektowana pod kątem dostępu z połączeniem i jest związana z fizycznym modelem danych. Technologia ADO.NET została zaprojektowana z myślą o dostępie bez połączenia i pozwala na logiczne modelowanie danych. W ADO.NET istnieje wyraźne rozró nienie między modelem dostępu z połączeniem a modelem dostępu bez połączenia. W ADO.NET nie ma właściwości %WTUQT6[RG, %WTUQT.QECVKQP ani .QEM6[RG. Technologia ta u ywa tylko statycznych kursorów klienckich i blokowania optymistycznego. Zamiast u ywać pojedynczego, uniwersalnego obiektu, w ADO.NET funkcje klasycznego obiektu TGEQTFUGV podzielono na mniejsze, bardziej wyspecjalizowane obiekty, takie jak CVC4GCFGT, CVC5GV i CVC6CDNG. ADO.NET umo liwia manipulowanie danymi XML, a nie tylko wykorzystywanie języka XML jako formatu wejścia-wyjścia. ADO.NET zapewnia ścisłą kontrolę typów w obiektach CVC5GV zamiast u ywania typu 8CTKCPV do obsługi wszystkich pól. Ułatwia to wykrywanie błędów w czasie pisania kodu i zwiększa wydajność aplikacji. 1DKGMV[ #10'6 Y QIÎNPGL UVTWMVWTG 0'6 (TCOGYQTM Na rysunku 4.1 przedstawiono miejsce klas ADO.NET w ogólnej strukturze .NET Fra- mework. Na dole znajduje się Common Language Framework (CLR), czyli infrastruktura
  10. 10. 152 Visual Basic .NET. Bazy danych. Księga eksperta 4[UWPGM Klasy ADO.NET w strukturze .NET Framework uruchomieniowa wszystkich aplikacji .NET (bez względu na język, w którym zostały napisane). Środowisko CLR zapewnia wspólny system plików, zarządzanie pamięcią i czasem „ ycia” obiektów. Następna warstwa logiczna, która korzysta z usług CLR, to zbiór podstawowych klas systemowych. To właśnie te klasy zapewniają bogaty zestaw funkcji, z których mogą korzystać aplikacje .NET. Na rysunku 4.1 pokazano tylko niektóre klasy z biblioteki .NET Framework. W praktyce warstwa ta jest nowym interfejsem programistycznym (ang. application programming interface, API) systemu Windows. W przeszłości funkcje systemu Windows były dostępne za pośrednictwem interfejsu Windows API, który skła- dał się z wielu niespójnych wywołań systemowych. W technologii .NET dostęp do tych (i nowych) funkcji odbywa się za pośrednictwem właściwości i metod eksponowanych przez podstawowe klasy systemowe. Dzięki takiemu podejściu pisanie aplikacji Windows jest bardziej spójne i komfortowe bez względu na to, czy są to aplikacje stacjonarne, inter- netowe czy usługi Web Services. Warstwa ta zawiera kilka przestrzeni nazw (grup klas i innych definicji) związanych z dostępem do danych: 5[UVGOCVC, 5[UVGOCVC1NG$ oraz 5[UVGOCVC5SN%NKGPV. W dalszej części niniejszego rozdziału — oraz w rozdziałach 5., 6. i 7. — przyjrzymy się bli ej wielu klasom i definicjom zawartym w tych przestrzeniach nazw. +PVGTHGLU[ CRNKMCE[LPG Na najwy szym poziomie pojawia się zró nicowanie między typami aplikacji, które mogą budować programiści. Istnieją klasy i kontrolki do budowania (klasycznych) aplikacji Windows opartych na formularzach (Windows Forms), inne klasy i kontrolki do budowa- nia aplikacji internetowych opartych na przeglądarce (Web Forms), i kolejny zbiór klas do budowania usług Web Services. Wszystkie one korzystają jednak ze wspólnej biblio- teki klas logiki aplikacyjnej — podstawowych klas systemowych. Wiemy ju mniej więcej, jakie miejsce zajmują klasy ADO.NET w ogólnej strukturze .NET Framework, więc przyjrzyjmy się bli ej obiektom ADO.NET.
  11. 11. Rozdział 4. ADO.NET — dostawcy danych 153 2TGINæF QDKGMVÎY FQUVCYE[EJ 0'6 Pomimo nacisku na model dostępu bez połączenia nadal konieczne jest łączenie się z fizyczną bazą danych w celu pobrania, zaktualizowania, wstawienia i (lub) usunięcia danych. Oprogramowanie, które łączy się i komunikuje z fizyczną bazą danych, w ter- minologii ADO.NET określa się mianem dostawcy danych .NET (ang .NET Data Provi- der). Dostawca danych .NET to odpowiednik dostawcy OLEDB albo sterownika ODBC. Dostawca danych składa się z kilku obiektów realizujących funkcje zdefiniowane przez klasy i interfejsy, z których się wywodzą. Obecnie dostępnych jest trzech dostawców danych ADO.NET, ka dy zdefiniowany we własnej przestrzeni nazw. W nazwach obiektów nale ących do tych przestrzeni nazw u ywa się przedrostków 1NGD, 5SN i 1FDE. Kiedy piszemy o tych obiektach w sposób ogólny, u ywamy nazwy obiektu bez adnego przedrostka. 5SN%NKGPV Dostawca danych 5SN%NKGPV jest zoptymalizowany pod kątem współpracy z SQL Serve- rem 7.0 i jego nowszymi wersjami. Osiąga większą wydajność, poniewa (1) komuni- kuje się z bazą danych za pośrednictwem natywnego protokołu Tabular Data Stream (TDS), a nie protokołu OLEDB, który musi odwzorowywać interfejs OLEDB na proto- kół TDS; (2) eliminuje dodatkowe koszty związane z usługami zgodności COM; (3) nie oferuje funkcji, które nie są obsługiwane przez SQL Server. Obiekty tego dostawcy są zawarte w przestrzeni nazw 5[UVGOCVC5SN%NKGPV. 1NGD Dostawca danych 1NGD uzyskuje dostęp do danych za pośrednictwem istniejącego natyw- nego dostawcy OLEDB (COM) oraz usług zgodności COM. U ywa się go do obsługi baz danych innych ni SQL Server 7.0 i jego nowsze wersje. Zapewnia dostęp do ka dej bazy danych, dla której napisano dostawcę OLEDB. Obiekty tego dostawcy są zawarte w przestrzeni nazw 5[UVGOCVC1NGD. 1FDE Dostawcy danych 1FDE u ywa się do obsługi baz danych, które nie mają własnego dostawcy .NET, ani dostawcy OLEDB (COM). Ponadto w przypadku niektórych baz danych sterow- nik ODBC mo e zapewniać większą wydajność ni sterownik OLEDB, więc warto prze- prowadzić testy, aby ustalić, który z nich lepiej odpowiada wymaganiom konkretnej apli- kacji. Obiekty tego dostawcy są zawarte w przestrzeni nazw /KETQUQHVCVC1FDE. Pisanie dostawcy danych ODBC opóźniło się nieco w stosunku do reszty .NET Framework i Visual Studia .NET. Nie został on więc dołączony do pierwotnego wydania Visual Studia .NET, ale można go pobrać z witryny WWW Microsoftu. Warto też sprawdzać, czy nie pojawili się nowi dostawcy danych .NET.
  12. 12. 154 Visual Basic .NET. Bazy danych. Księga eksperta Obecnie w witrynie WWW dostępny jest również dostawca danych Oracle .NET. Dostawcy ODBC i Oracle są dołączeni do wersji 1.1 .NET Framework dostarczanej wraz z Visual Studiem .NET 2003. W rezultacie przestrzeń nazw dostawcy ODBC zmieni się z: /KETQUQHVCVC1FDE na: 5[UVGOCVC1$% W przykładach zamieszczonych w niniejszym rozdziale używana jest wersja 1.0 dostawcy ODBC. Ci, którzy korzystają już z wersji 1.1, powinni zmienić przestrzeń nazw w pokazany wyżej sposób. -NWEQYG QDKGMV[ Ka dy dostawca danych zawiera cztery kluczowe obiekty, które są wymienione w tabeli 4.1. 6CDGNC Kluczowe obiekty dostawców danych 1DKGMV -TÎVMK QRKU %QPPGEVKQP Nawiązuje połączenie ze specyficznym źródłem danych %QOOCPF Wykonuje polecenie w źródle danych; eksponuje kolekcję obiektów 2CTCOGVGT oraz metody do wykonywania ró nych typów poleceń CVC4GCFGT Zwraca jednokierunkowy, przeznaczony tylko do odczytu strumień danych ze źródła danych CVC#FCRVGT Tworzy pomost między obiektem CVC5GV a źródłem danych, aby umo liwić pobieranie i zapisywanie danych Ka dy obiekt wywodzi się z uniwersalnej klasy bazowej i implementuje uniwersalne interfejsy, ale zapewnia własną, specyficzną implementację. Na przykład obiekty 5SNCVC å#FCRVGT, 1NGDCVC#FCRVGT i 1FDECVC#FCRVGT wywodzą się z klasy DCVC#FCRVGT i implementują te same interfejsy. Jednak e ka dy z nich implementuje je inaczej, na u ytek odpowiedniego źródła danych. Przestrzeń nazw 5[UVGOCVC1NGD zawiera następujące obiekty: 1NGD%QPPGEVKQP, 1NGD%QOOCPF, 1NGDCVC4GCFGT, 1NGDCVC#FCRVGT. Przestrzeń nazw 5[UVGOCVC5SN%NKGPV zawiera następujące obiekty: 5SN%QPPGEVKQP, 5SN%QOOCPF, 5SNCVC4GCFGT, 5SNCVC#FCRVGT.
  13. 13. Rozdział 4. ADO.NET — dostawcy danych 155 Wreszcie przestrzeń nazw /KETQUQHVCVC1FDE zawiera następujące obiekty: 1FDE%QPPGEVKQP, 1FDE%QOOCPF, 1FDECVC4GCFGT, 1FDECVC#FCRVGT. Wszyscy przyszli dostawcy danych będą mieć własne przestrzenie nazw i będą imple- mentować wymagane obiekty w taki sam sposób. 1DKGMV %QPPGEVKQP Obiekt ADO.NET %QPPGEVKQP przypomina znany i lubiany obiekt %QPPGEVKQP z klasycznej technologii ADO. Słu y do nawiązywania połączenia z konkretnym źródłem danych z wykorzystaniem nazwy u ytkownika i hasła określonych przez łańcuch połączeniowy (ang. connection string). Mo na dostosować połączenie do własnych potrzeb, określając odpowiednie parametry i wartości w łańcuchu połączeniowym. Obiekt %QOOCPF (albo CVC#FCRVGT) mo e następnie u yć tego połączenia, aby wykonać ądane operacje na źródle danych. W przeciwieństwie do obiektu %QPPGEVKQP z ADO 2.X, obiekt %QPPGEVKQP z ADO.NET nie ma metod 'ZGEWVG ani 1RGP5EJGOC. Polecenia SQL można wykonywać tylko za pomocą obiektów %QOOCPF albo CVC#FCRVGT. Odpowiednikiem metody 1RGP5EJGOC jest metoda )GV1NGD5EJGOC6CDNG obiektu 1NGD%QPPGEVKQP. Choć pochodne obiekty 1NGD%QPPGEVKQP, 5SN%QPPGEVKQP i 1FDE%QPPGEVKQP implemen- tują te same interfejsy, istnieją między nimi ró nice. Odmienne są, na przykład, formaty łańcuchów połączeniowych. Format łańcucha 1NGD%QPPGEVKQP zaprojektowano tak, aby odpowiadał (z niewielkimi wyjątkami) standardowemu łańcuchowi połączeniowemu OLEDB. Format łańcucha 1FDE%QPPGEVKQP jest zbli ony do standardowego formatu łań- cucha połączeniowego ODBC, choć nie identyczny. Format łańcucha 5SN%QPPGEVKQP ró ni się od dwóch pozostałych, poniewa zawiera parametry dotyczące tylko SQL Servera 7.0 i jego nowszych wersji. Co więcej, niektóre obiekty zawierają dodatkowe właściwości. Na przykład obiekt 1NG D%QPPGEVKQP ma właściwość 2TQXKFGT, za pomocą której określa się dostawcę OLEDB, a obiekt 1FDE%QPPGEVKQP ma właściwość TKXGT, za pomocą której określa się sterownik ODBC. Obiekt 5SN%QPPGEVKQP nie ma adnej z tych właściwości, poniewa jego źródło danych jest z góry określone (SQL Server). Ma natomiast właściwości 2CEMGV5KG i 9QTMUVCVKQP+ specyficzne dla SQL Servera i nieobsługiwane przez dwa pozostałe typy połączeń. Dość teorii; przejdźmy wreszcie do pisania kodu! Wszystkie kluczowe obiekty dostaw- ców danych zostaną zaprezentowane na prostych, konkretnych przykładach. Zaczniemy od poni szego przykładowego programu i będziemy stopniowo go rozwijać.
  14. 14. 156 Visual Basic .NET. Bazy danych. Księga eksperta Uruchomić Visual Studio .NET. Utworzyć nowy projekt Visual Basica — Windows Application. Nadać projektowi nazwę 1DKGMV[QUVCYE[CP[EJ. Określić ście kę do folderu, w którym zostaną zapisane pliki projektu. Powiększyć formularz (QTO. W oknie właściwości formularza (QTO ustawić jego właściwość 6GZV na 1DKGMV[ FQUVCYE[ FCP[EJ. Przeciągnąć przycisk z zakładki Windows Forms przybornika do górnego lewego rogu formularza. W oknie właściwości przycisku ustawić właściwość 0COG na EOF%QPPGEVKQP, a właściwość 6GZV na 2Q æEGPKG. Przeciągnąć pole tekstowe z zakładki Windows Forms przybornika na prawą stronę formularza. W oknie właściwości pola tekstowego ustawić właściwość 0COG na VZV4GUWNVU, właściwość /WNVKNKPG na 6TWG, a właściwość 5ETQNN$CTU na $QVJ. Powiększyć pole tekstowe tak, aby pokrywało mniej więcej 80 procent obszaru formularza. Po wykonaniu powy szych czynności formularz powinien wyglądać tak jak na rysunku 4.2. 4[UWPGM Formularz Form1 w projekcie ObiektyDostawcowDanych Teraz nale y przełączyć się do widoku kodu formularza i dodać poni sze wiersze na górze pliku. Powodują one zaimportowanie przestrzeni nazw, których będziemy u ywać podczas pisania przykładowych aplikacji w niniejszym rozdziale: +ORQTVU 5[UVGOCVC +ORQTVU 5[UVGOCVC5SN%NKGPV +ORQTVU 5[UVGOCVC1NGD +ORQTVU /KETQUQHVCVC1FDE
  15. 15. Rozdział 4. ADO.NET — dostawcy danych 157 Zwróćmy uwagę na uniwersalne klasy i definicje ADO.NET oraz oddzielną przestrzeń nazw ka dego dostawcy danych. Edytor Visual Studia może nie rozpoznać przestrzeni nazw /KETQUQHVCVC1FDE, ponieważ w rzeczywistości jest to dodatek do podstawowego wydania produktu. W takim przypadku należy wykonać poniższe czynności: Pobrać plik instalacyjny dostawcy danych 1FDE z witryny WWW Microsoftu i zainstalować go w komputerze. W oknie Solution Explorer kliknąć prawym przyciskiem myszy węzeł References projektu 1DKGMV[QUVCYEQYCP[EJ. Z podręcznego menu wybrać polecenie Add Reference. Na karcie .NET okna dialogowego Add Reference przewinąć w dół listę komponentów 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. Jeśli z jakichś przyczyn nie zostanie rozpoznana któraś z pozostałych przestrzeni nazw, trzeba będzie dodać odwołanie do biblioteki System.Data.dll. W tym celu należy wykonać czynności 2 – 6, a w punkcie 4. zamienić nazwę Microsoft.Data.Odbc.dll 1 na System.Data.dll . Teraz w procedurze obsługi zdarzenia DVP%QPPGEVKQPA%NKEM nale y wpisać kod przed- stawiony na listingu 4.1, który otwiera połączenie z bazą danych RWDU w SQL Serverze. Kod ten wyświetla stan połączenia przed próbą nawiązania połączenia i po niej. .KUVKPI Kod, który otwiera połączenie z bazą danych i wyświetla jego stan 2TKXCVG 5WD DVP%QPPGEVKQPA%NKEM $[8CN UGPFGT #U 5[UVGO1DLGEV A $[8CN G #U 5[UVGO'XGPV#TIU *CPFNGU A DVP%QPPGEVKQP%NKEM ' Tworzenieinstancji obiektu Connection KO EPP #U 5SN%QPPGEVKQP 0GY 5SN%QPPGEVKQP ' Ustawianie łańcucha połączeniowego EPP%QPPGEVKQP5VTKPI UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU VZV4GUWNVU%NGCT ' Wyświetlanie stanu połączenia +H EPP5VCVG 5[UVGOCVC%QPPGEVKQP5VCVG1RGP 6JGP VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV QVYCTVG 'NUG VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV COMPKúVG 'PF +H VZV4GUWNVU6GZV VZV4GUWNVU6GZV %QPVTQN%JCTU%T.H %QPVTQN%JCTU%T.H ' Otwieranie połączenia VZV4GUWNVU6GZV VZV4GUWNVU6GZV 1VYKGTCPKG RQ æEGPKC DCæ FCP[EJ A %QPVTQN%JCTU%T.H %QPVTQN%JCTU%T.H EPP1RGP 1 U ytkownicy Visual Studia .NET 2003 powinni zamienić przestrzeń nazw /KETQUQHVCVC1FDE na 5[UVGOCVC1FDE — przyp. tłum.
  16. 16. 158 Visual Basic .NET. Bazy danych. Księga eksperta ' Wyświetlanie stanu połączenia +H EPP5VCVG 5[UVGOCVC%QPPGEVKQP5VCVG1RGP 6JGP VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV QVYCTVG 'NUG VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV COMPKúVG 'PF +H VZV4GUWNVU6GZV VZV4GUWNVU6GZV %QPVTQN%JCTU%T.H 'PF 5WD Nową przydatną funkcją VB.NET jest możliwość automatycznego uzyskiwania tekstowej reprezentacji wartości wyliczeniowej (GPWO) zamiast pisania procedury, która wykonuje instrukcję UGNGEVECUG na wszystkich możliwych wartościach wyliczenia. Typy wyliczane są obiektami i dziedziczą metodę 6Q5VTKPI, która zwraca łańcuch odpowiadający bieżącej wartości wyliczenia. Na listingu 4.1 można zastąpić jednym wierszem instrukcje +H'NUG, które wyświetlają stan połączenia. Zamiast: ' Wyświetlanie stanu połączenia +H EPP5VCVG 5[UVGOCVC%QPPGEVKQP5VCVG1RGP 6JGP VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV QVYCTVG 'NUG VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV COMPKúVG 'PF +H można napisać: ' Wyświetlanie stanu połączenia VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2Q æEGPKG LGUV Y UVCPKG A EPP5VCVG6Q5VTKPI %QPVTQN%JCTU%T.H Po uruchomieniu projektu 1DKGMV[QUVCYEQYCP[EJ i kliknięciu przycisku Połączenie w polu tekstowym powinny ukazać się komunikaty, e połączenie jest zamknięte, otwie- rane, a wreszcie otwarte (zobacz rysunek 4.3). 4[UWPGM Wyniki otwierania połączenia za pomocą kodu z listingu 4.3. Podczas pisania kodu prawdziwych aplikacji trzeba wybrać i wdrożyć strategię obsługi błędów w poszczególnych procedurach i operacjach. Taka strategia zwykle opiera się na bloku 6T[%CVEJ. Zwykle nie dołączamy tego kodu do przykładów, ponieważ skupiamy się na programowaniu baz danych, a nie na ogólnych aspektach programowania w VB.NET.
  17. 17. Rozdział 4. ADO.NET — dostawcy danych 159 1DKGMV %QOOCPF Obiekt ADO.NET %QOOCPF równie powinien wydawać się znajomy doświadczonym programistom ADO 2.X. Podobnie jak obiekt ADO.NET %QPPGEVKQP, przypomina on swojego poprzednika z ADO 2.X. Obiekt ten umo liwia wydawanie poleceń źródłu danych oraz pobieranie danych i (lub) wyników (jeśli polecenie zwraca jakieś wyniki). Zgodnie z oczekiwaniami obiekt %QOOCPF ma właściwości %QOOCPF6GZV i %QOOCPF6[RG, które definiują tekst i typ polecenia, właściwość %QPPGEVKQP, która określa połączenie u ywane do wykonania polecenia, oraz właściwość %QOOCPF6KOGQWV, która określa, jak długo polecenie mo e być wykonywane, zanim zostanie wygenerowany błąd. Ma równie właściwość 2CTCOGVGTU, która jest kolekcją parametrów przekazywanych wykonywanemu poleceniu. Wreszcie, w przeciwieństwie do klasycznego obiektu ADO %QOOCPF, właściwość 6TCPUCEVKQP określa transakcję, w ramach której wykonywane jest polecenie. Wszystkie trzy wersje obiektu %QOOCPF (1NGD, 5SN i 1FDE) mają identyczne właściwo- ści i metody z jednym wyjątkiem. Obiekt 5SN%QOOCPF ma jedną dodatkową metodę — 'ZGEWVG:ON4GCFGT. Metoda ta wykorzystuje mechanizm SQL Servera, który automa- tycznie zwraca dane w formacie XML (kiedy do kwerendy SQL 5'.'%6 zostanie dodana klauzula (14 :/.). Inną różnicą między poszczególnymi wersjami obiektu %QOOCPF są wartości właściwości %QOOCPF6[RG. Wszystkie trzy wersje obsługują wartości 6GZV i 5VQTGF2TQEGFWTG, ale obiekt 1NGD%QOOCPF obsługuje również trzecią wartość — 6CDNGKTGEV. Pozwala ona efektywnie wczytać zawartość całej tabeli poprzez ustawienie właściwości %QOOCPF6[RG na 6CDNGKTGEV, a właściwości %QOOCPF6GZV na nazwę tabeli. Teraz nale y rozbudować przygotowany wcześniej formularz (zobacz rysunek 4.1): Dodać kolejny przycisk tu pod przyciskiem DVP%QPPGEVKQP poprzez przeciągnięcie go z zakładki Windows Forms przybornika. W oknie właściwości przycisku ustawić właściwość 0COG na DVP%QOOCPF, a właściwość 6GZV na 2QNGEGPKG. Wpisać kod obsługi przycisku DVP%QOOCPF (zobacz listing 4.2). .KUVKPI Kod, który otwiera połączenie z bazą danych i przygotowuje obiekt polecenia 2TKXCVG 5WD DVP%QOOCPFA%NKEM $[8CN UGPFGT #U 5[UVGO1DLGEV A $[8CN G #U 5[UVGO'XGPV#TIU *CPFNGU DVP%QOOCPF%NKEM ' Tworzenie instancji obiektu Connection KO EPP #U 5SN%QPPGEVKQP 0GY 5SN%QPPGEVKQP A UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU ' Tworzenie instancji obiektów Command i Parameter KO EOF #U 5SN%QOOCPF 0GY 5SN%QOOCPF VZV4GUWNVU%NGCT ' Otwieranie połączenia EPP1RGP ' Ustawianie połączenia i tekstu polecenia w obiekcie Command EOF%QPPGEVKQP EPP EOF%QOOCPF6[RG %QOOCPF6[RG6GZV
  18. 18. 160 Visual Basic .NET. Bazy danych. Księga eksperta EOF%QOOCPF6GZV 5GNGEV CWANPCOG UVCVG HTQO CWVJQTU ' Wypisywanie łańcucha polecenia VZV4GUWNVU6GZV C EWEJ RQNGEGPKC %QPVTQN%JCTU%T.H VZV4GUWNVU6GZV VZV4GUWNVU6GZV %QPVTQN%JCTU6CD A EOF%QOOCPF6GZV %QPVTQN%JCTU%T.H 'PF 5WD Po uruchomieniu projektu 1DKGMV[QUVCYEQYCP[EJ i kliknięciu przycisku %QOOCPF w polu tekstowym powinna pojawić się instrukcja SQL, którą przypisano właściwości %QOOCPF6GZV obiektu 5SN%QOOCPF: 5GNGEV CWANPCOG UVCVG HTQO CWVJQTU. Wiele klas .NET Framework, a także klas pisanych przez innych programistów, zawiera przeciążone konstruktory obiektów. Innymi słowy, istnieje kilka różnych metod tworzenia nowych instancji klasy, za pomocą konstruktorów przyjmujących różną liczbę argumentów. Można wybrać wersję, która najlepiej odpowiada bieżącym potrzebom. Konstruktor obiektu 5SN%QPPGEVKQP z listingu 4.2 różni się od konstruktora z listingu 4.1. W tamtym przykładzie użyliśmy konstruktora domyślnego, który nie przyjmuje żadnych argumentów. Następnie przypisaliśmy łańcuch połączeniowy obiektowi 5SN%QPPGEVKQP, ustawiając właściwość %QPPGEVKQP5VTKPI: ' Tworzenie instancji obiektu Connection KO EPP #U 5SN%QPPGEVKQP 0GY 5SN%QPPGEVKQP ' Ustawianie łańcucha połączeniowego EPP%QPPGEVKQP5VTKPI UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU Na listingu 4.2 użyliśmy konstruktora, który przyjmuje łańcuch połączeniowy jako argument. Dzięki temu mogliśmy utworzyć obiekt i przypisać mu łańcuch połączeniowy za pomocą jednego wiersza kodu: ' Tworzenie instancji obiektu Connection KO EPP #U 5SN%QPPGEVKQP 0GY 5SN%QPPGEVKQP A UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU 7 [YCPKG QDKGMVW %QOOCPF Y RQ æEGPKW RCTCOGVTCOK K RTQEGFWTCOK UM CFQYCP[OK Podczas przesyłania kwerend lub poleceń do źródła danych często trzeba przekazywać wartości parametrów. Jest to niemal regułą podczas wykonywania poleceń akcji (72#6', +05'46 lub '.'6') i wywoływania procedur składowanych. Aby spełnić ten wymóg, obiekt %QOOCPF zawiera właściwość 2CTCOGVGTU, która jest obiektem typu 2CTCOGVGT%QNNGEVKQP i zawiera kolekcję obiektów 2CTCOGVGT. Mechanizm ten równie jest bardzo podobny do swojego odpowiednika z ADO 2.X. Obiekt 2CTCOGVT (i 2CTCOGVGT%QNNGEVKQP) jest ściśle związany z konkretnym dostawcą danych, więc jest jednym z obiektów, które muszą być zaimplementowane w ka dym dostawcy danych ADO.NET. Programowanie obiektu 5SN2CTCOGVGT%QNNGEVKQP znacz- nie się ró ni od programowania obiektów 1FDE2CTCOGVGT%QNNGEVKQP i 1NGD2CTCOGVGT å%QNNGEVKQP. Pierwszy obsługuje parametry nazwane, a pozostałe dwa — parametry pozycyjne. Ró nica ta wpływa na sposób definiowania kwerend i parametrów.
  19. 19. Rozdział 4. ADO.NET — dostawcy danych 161 Zacznijmy od prostej kwerendy parametrycznej na tabeli CWVJQTU w bazie danych RWDU. Przypuśćmy, e chcemy pobierać nazwiska wszystkich autorów z określonego stanu. Gdybyśmy u ywali dostawcy danych 1NGD lub 1FDE, kwerenda wyglądałaby tak: 5GNGEV UVCVG CWAHPCOG CWANPCOG HTQO CWVJQTU YJGTG UVCVG ! Miejscem na parametr jest tutaj znak zapytania. Gdyby kwerenda miała inne parametry, równie zastąpiono by je znakami zapytania. Poszczególne parametry są odró niane według pozycji; oznacza to, e kolejność dodawania parametrów do obiektu 2CTCOGVGT å%QNNGEVKQP musi dokładnie odpowiadać ich kolejności w kwerendzie albo procedurze składowanej. Gdybyśmy natomiast u ywali dostawcy danych 5SN%NKGPV, kwerenda wyglądałaby tak: 5GNGEV UVCVG CWAHPCOG CWANPCOG HTQO CWVJQTU YJGTG UVCVG /[2CTCO Miejscem na parametr jest tu nazwa specyficznego parametru; dodatkowe parametry rów- nie byłyby określone przez nazwy. Poniewa parametry są odró niane według nazw, mo na je dodawać do obiektu 2CTCOGVGT%QNNGEVKQP w dowolnej kolejności. Obiekt 2CTCOGVGT mo na utworzyć jawnie, za pomocą jego konstruktora (to znaczy za pomocą operatora 0GY), albo poprzez przekazanie wymaganych parametrów do metody #FF obiektu 2CTCOGVGT%QNNGEVKQP (właściwości 2CTCOGVGTU obiektu %QOOCPF). Warto te zauwa yć, e zarówno konstruktor 2CTCOGVGT, jak i metoda #FF mają kilka przecią onych wersji. Oto sposób dodawania parametru polecenia poprzez jawne utworzenie obiektu parametru: KO O[2CTCOGVGT #U 0GY 1FDE2CTCOGVGT /[2CTCO 1FDE6[RG%JCT O[2CTCOGVGTKTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV O[2CTCOGVGT8CNWG %# EOF2CTCOGVGTU#FF O[2CTCOGVGT A oto sposób dodawania parametru polecenia poprzez przekazanie odpowiednich argu- mentów do metody #FF: EOF2CTCOGVGTU#FF /[2CTCO 1FDE6[RG%JCT EOF2CTCOGVGTU /[2CTCOKTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV EOF2CTCOGVGTU /[2CTCO8CNWG %# Drugi sposób jest krótszy i zwykle preferowany, chyba e obiekt 2CTCOGVGT będzie u ywany wielokrotnie. W wywołaniu metody #FF trzeba określić nazwę parametru, jego typ i (w razie potrzeby) długość. Następnie mo na ustawić „kierunek” parametru — wejściowy (+PRWV), wyjściowy (1WVRWV), wejściowo-wyjściowy (+PRWV1WVRWV) albo wartość zwrotna (4GVWTP8CNWG). Do- myślny kierunek to +PRWV. Wreszcie, aby określić wartość parametru, nale y przypisać ją właściwości 8CNWG obiektu 2CTCOGVGT. Mo na ustawić kilka dodatkowych właściwości tego obiektu takich jak 5ECNG, 2TGEKUKQP i +U0WNNCDNG. Gdybyśmy u ywali dostawcy danych 5SN%NKGPV, kod byłby niemal identyczny. Zastąpi- libyśmy tylko przedrostki 1FDE przedrostkami 5SN i u yli typu wyliczeniowego 5SND6[RG:
  20. 20. 162 Visual Basic .NET. Bazy danych. Księga eksperta KO O[2CTCOGVGT #U 0GY 5SN2CTCOGVGT /[2CTCO 5SND6[RG%JCT O[2CTCOGVGTKTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV O[2CTCOGVGT8CNWG %# EOF2CTCOGVGTU#FF O[2CTCOGVGT lub: EOF2CTCOGVGTU#FF /[2CTCO 5SND6[RG%JCT EOF2CTCOGVGTU /[2CTCOKTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV EOF2CTCOGVGTU /[2CTCO8CNWG %# Aby przypisać parametrowi wartość 0WNN, należy użyć właściwości 8CNWG obiektu $0WNN. Oto odpowiedni wiersz kodu: EOF2CTCOGVGTU /[2CTCO 8CNWG $0WNN8CNWG Zmodyfikujmy kod przycisku DVP%QOOCPF w sposób pokazany na listingu 4.3. Po urucho- mieniu programu i kliknięciu przycisku Polecenie wyświetlony zostanie tekst kwerendy oraz nazwa i wartość parametru. .KUVKPI Kod, który przygotowuje obiekty polecenia i parametru oraz wyświetla ich wartości 2TKXCVG 5WD DVP%QOOCPFA%NKEM $[8CN UGPFGT #U 5[UVGO1DLGEV A $[8CN G #U 5[UVGO'XGPV#TIU *CPFNGU DVP%QOOCPF%NKEM ' Tworzenie instancji obiektu Connection KO EPP #U 5SN%QPPGEVKQP 0GY 5SN%QPPGEVKQP A UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU ' Tworzenie instancji obiektu Command i obiektu Parameter KO EOF #U 5SN%QOOCPF 0GY 5SN%QOOCPF KO RTO #U 5SN2CTCOGVGT 0GY 5SN2CTCOGVGT VZV4GUWNVU%NGCT ' Otwieranie połączenia EPP1RGP ' Ustawianie połączenia i tekstu polecenia w obiekcie Command EOF%QPPGEVKQP EPP EOF%QOOCPF6[RG %QOOCPF6[RG6GZV EOF%QOOCPF6GZV A 5GNGEV CWANPCOGUVCVG HTQO CWVJQTU YJGTG UVCVG /[2CTCO 'Tworzenie parametru i ustawianie wartości EOF2CTCOGVGTU#FF 0GY 5SN2CTCOGVGT /[2CTCO A 5SND6[RG%JCT EOF2CTCOGVGTU /[2CTCO 8CNWG %# ' Wypisywanie łańcucha polecenia VZV4GUWNVU6GZV C EWEJ RQNGEGPKC %QPVTQN%JCTU%T.H VZV4GUWNVU6GZV VZV4GUWNVU6GZV %QPVTQN%JCTU6CD A EOF%QOOCPF6GZV %QPVTQN%JCTU%T.H ' Wypisywanie parametrów polecenia i ich wartości VZV4GUWNVU6GZV VZV4GUWNVU6GZV 2CTCOGVT[ RQNGEGPKC A %QPVTQN%JCTU%T.H (QT 'CEJ RTO +P EOF2CTCOGVGTU VZV4GUWNVU6GZV VZV4GUWNVU6GZV %QPVTQN%JCTU6CD A RTO2CTCOGVGT0COG RTO8CNWG %QPVTQN%JCTU%T.H 0GZV 'PF 5WD
  21. 21. Rozdział 4. ADO.NET — dostawcy danych 163 Procedury składowane wywołuje się w ten sam sposób z tym, e typem polecenia jest %QOOCPF6[RG5VQTGF2TQEGFWTG, a nie %QOOCPF6[RG6GZV. Nazwę procedury składowanej nale y przypisać właściwości %QOOCPF6GZV. Zatem wywołanie procedury składowanej o nazwie )GV#WVJQTU(TQO5VCVG, która przyjmuje dwuznakowy parametr, wyglądałoby tak: EOF%QOOCPF6[RG %QOOCPF6[RG5VQTGF2TQEGFWTG EOF%QOOCPF6GZV )GV#WVJQTU(TQO5VCVG EOF2CTCOGVGTU#FF /[2CTCO 5SND6[RG%JCT EOF2CTCOGVGTU /[2CTCO KTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV EOF2CTCOGVGTU /[2CTCO 8CNWG %# W razie wywoływania procedury składowanej za pośrednictwem obiektu 1FDE%QOOCPF należy używać standardowych sekwencji unikowych ODBC, zamiast po prostu podawać nazwę procedury składowanej we właściwości %QOOCPF6GZV. W sekwencji unikowej znaki zapytania zastępują wartości parametrów. Odpowiednik ODBC powyższego kodu wyglądałby tak: EOF%QOOCPF6[RG %QOOCPF6[RG5VQTGF2TQEGFWTG EOF%QOOCPF6GZV ])GV#WVJQTU(TQO5VCVG !_ EOF2CTCOGVGTU#FF /[2CTCO 1FDE6[RG%JCT EOF2CTCOGVGTU /[2CTCO KTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV EOF2CTCOGVGTU /[2CTCO 8CNWG %# Jeśli procedura składowana ma wartość zwrotną, należy poprzedzić nazwę procedury znakami ! , jak w poniższym przykładzie: EOF%QOOCPF6GZV ]! )GV#WVJQTU(TQO5VCVG !_ Jeśli procedura składowana zwraca wyniki, nale y określić kierunek 1WVRWV i odczytać właściwość 8CNWG parametru po wywołaniu procedury. W poni szym przykładzie okre- ślono te , e procedura ma wartość zwrotną. Poniewa u yto typu +PV SQL Servera, nie trzeba określać długości parametru, gdy z definicji składa się on z czterech bajtów: EOF2CTCOGVGTU#FF 0GY 5SN2CTCOGVGT TGUWNV 5SND6[RG+PV EOF2CTCOGVGTU TGUWNV KTGEVKQP 2CTCOGVGTKTGEVKQP4GVWTP8CNWG EOF2CTCOGVGTU#FF 0GY 5SN2CTCOGVGT /[2CTCO 5SND6[RG+PV EOF2CTCOGVGTU /[2CTCO KTGEVKQP 2CTCOGVGTKTGEVKQP1WVRWV ' Tutaj nale y wywołać procedurę składowaną /UI$QZ EOF2CTCOGVGTU /[2CTCO 8CNWG Jeśli parametr jest wartością zwrotną (4GVWTP8CNWG) procedury składowanej, powinien być dodawany jako pierwszy do kolekcji 2CTCOGVGTU. Jest to wymagane w przypadku parametrów 1NGD i 1FDE, ponieważ — jak już wspomniano — mają one charakter pozycyjny, a wartość zwrotna jest przekazywana na pierwszej pozycji. Natomiast w przypadku parametrów 5SN wartość zwrotna może natomiast zajmować dowolną pozycję, ponieważ są one rozróżniane według nazw. Niebawem wyjaśnimy, jak wykonywać te polecenia, a wówczas przedstawimy dodatkowe przykłady u ycia parametrów. 9[MQP[YCPKG RQNGEG Dotychczas ustawialiśmy ró ne właściwości i parametry obiektu %QOOCPF, ale jeszcze nie wykonaliśmy adnego polecenia! Czas to zrobić. Istnieją trzy standardowe sposoby wykonywania poleceń zdefiniowanych w obiekcie %QOOCPF oraz jeden sposób dodatkowy, dostępny tylko w przypadku obiektów 5SN%QOOCPF:
  22. 22. 164 Visual Basic .NET. Bazy danych. Księga eksperta 'ZGEWVG0QP3WGT[ — wykonuje polecenie SQL, które nie zwraca adnych rekordów, 'ZGEWVG5ECNCT — wykonuje polecenie SQL i zwraca pierwszą kolumnę pierwszego wiersza, 'ZGEWVG4GCFGT — wykonuje polecenie SQL i zwraca wynikowy zestaw rekordów za pośrednictwem obiektu CVC4GCFGT, 'ZGEWVG:ON4GCFGT — wykonuje polecenie SQL i zwraca wynikowy zestaw rekordów w formacie XML za pośrednictwem obiektu :/.4GCFGT. Poni ej omówimy trzy pierwsze metody wykonywania poleceń. W rozdziale 10. zaj- miemy się metodą 'ZGEWVG:ON4GCFGT, kiedy będziemy omawiać zastosowania języka XML w ADO.NET. 'ZGEWVG0QP3WGT[ Metoda 'ZGEWVG0QP3WGT[ to prawdopodobnie najłatwiejszy sposób wykonywania pole- ceń na źródle danych. Metoda ta umo liwia wykonywanie poleceń, które nie zwracają wyników (zestawów rekordów albo wartości skalarnych) poza wartością, która określa sukces lub niepowodzenie. Jest to równie najbardziej wydajna metoda wykonywania poleceń. Mo na wykonywać te instrukcje SQL lub procedury składowane, które: (1) są poleceniami %#6#.1) lub Data Definition Language (DDL) słu ącymi do tworzenia lub modyfikowania struktur bazy danych takich jak tabele, widoki lub procedury składowane, (2) są poleceniami aktualizacyjnymi (72#6', +05'46 lub '.'6') słu ącymi do modyfi- kowania danych. Metoda 'ZGEWVG0QP3WGT[ zwraca pojedynczą wartość całkowitą. Znaczenie tej wartości zależy od typu wykonywanego polecenia. Jeśli używane są polecenia %#6#.1) lub DDL, które modyfikują strukturę bazy danych, wartość zwrotna metody jest równa –1, jeśli operacja przebiegła pomyślnie. Jeśli używane są połączenia 72#6', +05'46 lub '.'6', które aktualizują dane, wartość zwrotna jest równa liczbie wierszy poddanych operacji. W obu przypadkach wartość zwrotna wynosi 0, jeśli operacja zakończy się niepowodzeniem. Kontynuując projekt 1DKGMV[QUVCYEQYCP[EJ, u yjemy obiektów z przestrzeni nazw 1NGD i będziemy pracować z bazą danych RWDU. Za pomocą odpowiedniego polecenia DDL utworzymy nową tabelę w tej bazie. Tabela będzie zawierać odwzorowania między kodami pocztowymi a stanami. Definicje pól tej tabeli będą dopasowane do u ywanych w bazie danych RWDU (innych ni pola w bazie danych 0QYKPMK). Tabela będzie zawierać dwa pola — jedno na kod pocztowy, a drugie na odpowiadający mu stan. Oto instrukcja SQL, która tworzy tę tabelę: %4'#6' 6#$.' VDN5VCVGKR%QFG KR%QFG EJCT 016 07.. 5VCVG EJCT 016 07.. Formularz (QTO nale y zmodyfikować w następujący sposób: Otworzyć formularz (QTO w środowisku programistycznym Visual Studio. W lewym górny rogu formularza dodać poprzez przeciągnięcie go z zakładki Windows Forms przybornika.
  23. 23. Rozdział 4. ADO.NET — dostawcy danych 165 W oknie właściwości przycisku ustawić właściwość 0COG na DVP0QP3WGT[, a właściwość 6GZV — na 9[MQPCPKG. Następnie do procedury obsługi zdarzenia %NKEM nowego przycisku nale y dodać kod przedstawiony na listingu 4.4. .KUVKPI Kod, który tworzy tabelę bazy danych za pomocą obiektów z przestrzeni nazw OleDb 2TKXCVG 5WD DVP0QP3WGT[A%NKEM $[8CN UGPFGT #U 5[UVGO1DLGEV A $[8CN G #U 5[UVGO'XGPV#TIU *CPFNGU DVP0QP3WGT[%NKEM ' Tworzenie instancji obiektu Connection KO EPP #U 1NGD%QPPGEVKQP 0GY 1NGD%QPPGEVKQP A RTQXKFGT53.1.'$UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU KO USN #U 5VTKPI KO TGUWNV #U +PVGIGT ' Tworzenie instancji obiektu Command KO EOF #U 1NGD%QOOCPF 0GY 1NGD%QOOCPF ' Określanie połączenia i tekstu polecenia EOF%QPPGEVKQP EPP EOF%QOOCPF6[RG %QOOCPF6[RG6GZV ' Przypisywanie instrukcji SQL, która tworzy nową tabelę USN %4'#6' 6#$.' VDN5VCVGKR%QFGU A KR%QFG EJCT 016 07.. A 5VCVG EJCT 016 07.. EOF%QOOCPF6GZV USN ' Otwieranie połączenia przed wywołaniem metody ExecuteNonQuery() EPP1RGP ' Kod trzeba umieścić w bloku Try-Catch, poniewa nieudane ' wykonanie polecenia powoduje błąd czasu wykonania 6T[ TGUWNV EOF'ZGEWVG0QP3WGT[ %CVEJ GZ #U 'ZEGRVKQP ' Wyświetlanie komunikatu o błędzie /GUUCIG$QZ5JQY GZ/GUUCIG 'PF 6T[ ' Wyświetlanie wyników polecenia +H TGUWNV 6JGP /GUUCIG$QZ5JQY 2QNGEGPKG QUVC Q Y[MQPCPG RQO[ NPKG 'NUG /GUUCIG$QZ5JQY 9[MQPCPKG RQNGEGPKC PKG RQYKQF Q UKú 'PF +H EPP%NQUG 'PF 5WD Kiedy projekt 1DKGMV[QUVCYEQYCP[EJ zostanie uruchomiony, a przycisk Wykonanie kliknięty po raz pierwszy, powinno pojawić się okno z informacją o pomyślnym wyko- naniu polecenia. Aby sprawdzić, czy tabela została utworzona, mo na obejrzeć listę tabel w bazie danych RWDU za pomocą narzędzia Server Explorer w Visual Studio (zobacz roz- dział 1.) albo za pomocą programu SQL Server Enterprise Manager (zobacz rozdział 3.). Jeśli przycisk Wykonanie zostanie kliknięty ponownie, pojawią się dwa okna z komuni- katami. Pierwsze okno zawiera tekst pochodzący z wygenerowanego wyjątku; jest ono wyświetlane przez blok %CVEJ i podaje przyczynę wystąpienia błędu. W tym przypadku polecenie zostało odrzucone, poniewa w bazie danych znajduje się ju tabela o takiej nazwie. Następnie zostanie wyświetlone drugie okno z komunikatem o niepowodzeniu podczas wykonywania polecenia.
  24. 24. 166 Visual Basic .NET. Bazy danych. Księga eksperta W ten sam sposób mo na utworzyć widok albo procedurę składowaną. Aby utworzyć widok o nazwie 'ORNQ[GG,QDUAXKGY, który zwraca listę stanowisk oraz nazwisk pracow- ników (posortowaną według stanowiska), nale y zmienić instrukcję SQL z listingu 4.3 w następujący sposób: USN %4'#6' 8+'9 'ORNQ[GG,QDUAXKGY #5 A 5'.'%6 612 2'4%'06 LQDULQDAFGUE A GORNQ[GGHPCOG GORNQ[GGNPCOG A (41/ LQDU +00'4 ,1+0 A GORNQ[GG 10 LQDULQDAKF GORNQ[GGLQDAKF A 14'4 $; LQDULQDAFGUE Aby dołączyć do definicji widoku klauzulę 14'4 $; w celu posortowania wyników, trzeba dodać klauzulę 612 w instrukcji 5'.'%6. Aby utworzyć procedurę składowaną, która przyjmuje jeden parametr i zwraca pojedynczą wartość, nale y zmienić instrukcję SQL w sposób pokazany na listingu 4.5. .KUVKPI Kod zawierający instrukcję SQL, która tworzy procedurę składowaną AuthorsInState1 USN %4'#6' 241%'74' #WVJQTU+P5VCVG 5VCVG EJCT A #5 '%.#4' TGUWNV KPV A 5'.'%6 TGUWNV %1706
  25. 25. (41/ CWVJQTU A 9*'4' UVCVG 5VCVG A 4'6740 TGUWNV Choć metoda 'ZGEWVG0QP3WGT[ zwraca tylko jedną wartość, jeśli zdefiniujemy parametry typu 1WVRWV lub 4GVWTP8CNWG, zostaną one prawidłowo wypełnione danymi parametru. Jest to bardziej wydajne niż polecenie, które zwraca zbiór wyników albo wartość skalarną. Rozwa my teraz drugi typ polecenia niekwerendowego — polecenie aktualizujące bazę danych, czyli instrukcję 72#6', '.'6' lub +05'46. Polecenia te zwykle wymagają okre- ślenia parametrów, zwłaszcza jeśli są wykonywane z wykorzystaniem procedur skła- dowanych (a powinny ze względu na wydajność). Przypuśćmy, e wydawca, który zaimplementował bazę danych RWDU, jest w dobrym nastroju i postanowił zwiększyć tantiemy wypłacane autorom. Jeśli do formularza (QTO w projekcie 1DKGMV[QUVCYEQYCP[EJ dodamy kolejny przycisk i pole tekstowe, główny księgowy wydawcy będzie mógł wprowadzić odsetek, o jaki zostaną zwiększone tantiemy, jako parametr polecenia 72#6'. W tym celu nale y wykonać poni sze czynności: Dodać kolejny przycisk tu pod przyciskiem DVP0QP3WGT[. W oknie właściwości przycisku ustawić właściwość 0COG na DVP7RFCVG, a właściwość 6GZV na #MVWCNKCELC. Pod nowym przyciskiem dodać pole tekstowe poprzez przeciągnięcie go z zakładki Windows Forms przybornika. W oknie właściwości pola tekstowego ustawić właściwość 0COG na VZV2CTCO, a właściwość 6GZV na . Dzięki ustawieniu wartości pola tekstowego na 0 u ytkownik, który uruchomi program i zapomni o ustawieniu tej wartości przed kliknięciem przycisku Aktualizacja, nie spowoduje uszkodzenia danych albo błędu czasu wykonania.
  26. 26. Rozdział 4. ADO.NET — dostawcy danych 167 Dodać kod nowego przycisku (zobacz listing 4.6). .KUVKPI Kod, który aktualizuje bazę danych, wykorzystując instrukcję SQL z parametrem 2TKXCVG 5WD DVP7RFCVGA%NKEM $[8CN UGPFGT #U 5[UVGO1DLGEV A $[8CN G #U 5[UVGO'XGPV#TIU *CPFNGU DVP7RFCVG%NKEM KO TGUWNV #U +PVGIGT ' Tworzenie instancji obiektu Connection KO EPP #U 5SN%QPPGEVKQP 0GY 5SN%QPPGEVKQP A UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU ' Tworzenie instancji obiektu Command KO EOF #U 5SN%QOOCPF 0GY 5SN%QOOCPF VZV4GUWNVU%NGCT ' Określanie połączenia i tekstu polecenia EOF%QPPGEVKQP EPP EOF%QOOCPF6[RG %QOOCPF6[RG6GZV EOF%QOOCPF6GZV 72#6' TQ[UEJGF 5'6 TQ[CNV[ TQ[CNV[ RCTCO ' Tworzenie parametru i ustawianie jego wartości EOF2CTCOGVGTU#FF 0GY 5SN2CTCOGVGT RCTCO 5SND6[RG+PV EOF2CTCOGVGTU RCTCO KTGEVKQP 2CTCOGVGTKTGEVKQP+PRWV EOF2CTCOGVGTU RCTCO 8CNWG 8CN VZV2CTCO6GZV ' Otwieranie połączenia przed wywołaniem funkcji ExecuteNonQuery() EPP1RGP TGUWNV EOF'ZGEWVG0QP3WGT[ /GUUCIG$QZ5JQY CMVWCNKQYCPQ TGUWNV A TGMQTFÎY 1DKGMV[ FQUVCYEÎY FCP[EJ EPP%NQUG 'PF 5WD Aby zaktualizować tabelę tantiem, nale y uruchomić projekt 1DKGMV[QUVCYEQYCP[EJ, wpisać wartość całkowitą w polu tekstowym parametru i kliknąć przycisk Aktualizuj. Powinno pojawić się okno komunikatu z informacją o liczbie zaktualizowanych rekordów. Mo na zweryfikować ten wynik poprzez uruchomienie programu SQL Server Enterprise Manager i wyświetlenie danych z tabeli TQ[UEJGF przed wykonaniem tego przykładowego programu i po nim. Tę samą aktualizację mo na wykonać za pomocą procedury składowanej. Zaletą procedur składowanych jest to, e są one bardziej wydajne i znajdują się w centralnej lokalizacji. Mają one jednak tę wadę, e w skład zespołu programistów musi wchodzić administra- tor baz danych, a przynajmniej ktoś, kto umie pisać procedury składowane. W du ych organizacjach mo e upłynąć sporo czasu, zanim uda się namówić administratora baz danych do zmodyfikowania procedury składowanej. Tym, którzy mogą zrobić to sami, nie zajmie to więcej ni minutę. Procedurę składowaną mo na dodać za pomocą pro- gramów SQL Server Enterprise Manager albo SQL Query Analyzer w sposób opisany w rozdziale 3. Mo na równie u yć projektu 1DKGMV[QUVCYEQYCP[EJ i zmienić instruk- cję SQL, jak zrobiliśmy to w jednym z poprzednich przykładów. Procedura składowana powinna wyglądać tak: %4'#6' 241%'74' 7RFCVG4Q[CNVKGU RCTCO KPV #5 72#6' TQ[UEJGF 5'6 TQ[CNV[ TQ[CNV[ RCTCO
  27. 27. 168 Visual Basic .NET. Bazy danych. Księga eksperta Aby wywołać procedurę składowaną, na listingu 4.6 trzeba zmienić właściwości %QOOCPF å6[RG i %QOOCPF6GZV obiektu %QOOCPF. Odpowiednie wiersze kodu powinny wyglądać tak: EOF%QOOCPF6[RG %QOOCPF6[RG5VQTGF2TQEGFWTG EOF%QOOCPF6GZV 7RFCVG4Q[CNVKGU Uruchomienie zmodyfikowanego programu powinno dać te same wyniki. Teraz aktuali- zacja jest wykonywana przez procedurę składowaną, a nie przez instrukcję SQL zapisaną w kodzie aplikacji. 'ZGEWVG5ECNCT Czasem trzeba wykonać polecenie bazy danych, które zwraca wartość skalarną — to znaczy pojedynczą. Typowym przykładem takich poleceń są instrukcje SQL, które wykonują funkcję agregacyjną, takie jak 57/ lub %1706. Innym przykładem są tabele wyszukiwania, które zwracają pojedynczą wartość, a tak e polecenia, które zwracają wartość logiczną. Metoda 'ZGEWVG5ECNCT wykonuje polecenie i zwraca pierwszą kolumnę pierwszego wiersza w zbiorze wyników. Pozostałe kolumny i wiersze są ignorowane. Dodajmy poni szą procedurę składowaną do bazy danych RWDU: %4'#6' 241%'74' #WVJQTU+P5VCVG RCTCO EJCT #5 5'.'%6 %1706
  28. 28. (41/ CWVJQTU 9*'4' UVCVG RCTCO Procedura #WVJQTU+P5VCVG przyjmuje parametr w postaci dwuliterowego kodu nazwy stanu i zwraca liczbę autorów mieszkających w określonym stanie. Jest ona funkcjonalnie równowa na procedurze #WVJQTU+P5VCVG pokazanej na listingu 4.5, ale zwraca zbiór wyników zamiast pojedynczej wartości. Kiedy używamy metody 'ZGEWVG5ECNCT zamiast 'ZGEWVG0QP3WGT[ i przekazujemy wartość skalarną jako parametr typu 4GVWTP8CNWG, wydajność aplikacji nieco się zmniejsza. Po co więc używać metody 'ZGEWVG5ECNCT? Jest ona prostsza i mniej pracochłonna, ponieważ nie trzeba definiować parametrów zarówno w poleceniu, jak i w wywołującym je kodzie. Aby wywołać tę procedurę za pomocą obiektów dostawcy danych 1FDE, nale y wykonać poni sze czynności: Dodać kolejny przycisk tu pod polem tekstowym VZV2CTCO. W oknie właściwości przycisku ustawić właściwość 0COG na DVP'ZGEWVG5ECNCT, a właściwość 6GZV na Wartość skalarna. Dodać kod nowego przycisku (zobacz listing 4.7). .KUVKPI Kod, który pobiera wartość skalarną z procedury składowanej, wykorzystując obiekty dostawcy danych Odbc 2TKXCVG 5WD DVP'ZGEWVG5ECNCTA%NKEM $[8CN UGPFGT #U 5[UVGO1DLGEV $[8CN G #U 5[UVGO'XGPV#TIU *CPFNGU DVP'ZGEWVG5ECNCT%NKEM KO TGUWNV #U +PVGIGT
  29. 29. Rozdział 4. ADO.NET — dostawcy danych 169 ' Tworzenie instancji obiektu Connection KO EPP #U 1FDE%QPPGEVKQP 0GY 1FDE%QPPGEVKQP A 4+8'4]53. 5GTXGT_UGTXGTNQECNJQUVWKFUCFCVCDCUGRWDU ' Tworzenie instancji obiektu Command KO EOF #U 1FDE%QOOCPF 0GY 1FDE%QOOCPF VZV4GUWNVU%NGCT ' Określanie połączenia i tekstu polecenia EOF%QPPGEVKQP EPP EOF%QOOCPF6[RG %QOOCPF6[RG5VQTGF2TQEGFWTG EOF%QOOCPF6GZV ]ECNN #WVJQTU+P5VCVG ! _ ' Tworzenie parametru i ustawianie jego wartości EOF2CTCOGVGTU#FF RCTCO 1FDE6[RG%JCT EOF2CTCOGVGTU RCTCO 8CNWG VZV2CTCO6GZV ' Otwieranie połączenia przed wywołaniem metody ExecuteScalar() EPP1RGP TGUWNV EOF'ZGEWVG5ECNCT /GUUCIG$QZ5JQY .KEDC CWVQTÎY TGUWNV 1DKGMV[ QUVCYEÎY FCP[EJ EPP%NQUG 'PF 5WD Teraz nale y uruchomić aplikację i wprowadzić dwuznakowy kod nazwy stanu w polu tekstowym parametru. Po kliknięciu przycisku Wartość skalarna powinno pojawić się okno komunikatu z informacją o liczbie autorów mieszkających w danym stanie. Mo na zweryfikować ten wynik za pomocą programu SQL Server Enterprise Manager poprzez wyświetlenie danych z tabeli CWVJQTU. Domyślne dane w tabeli RWDU powinny dać wynik 2 w przypadku stanu UT i 15 w przypadku stanu CA. 'ZGEWVG4GCFGT Najlepsze (i najwa niejsze) zostawiliśmy na koniec. Metodę 'ZGEWVG4GCFGT wywołuje się po to, aby wykonać polecenie, które zwraca zestaw wierszy (rekordów). W większości aplikacji bazodanowych właśnie ta metoda wykonywania poleceń jest u ywana najczę- ściej. Wykonuje ona polecenie, które zwraca wiersze danych za pośrednictwem obiektu CVC4GCFGT. Wiersze skanuje się kolejno, zaczynając od pierwszego. W następnym podroz- dziale podamy więcej informacji o obiekcie CVC4GCFGT i podamy odpowiednie przykłady.

×