SlideShare a Scribd company logo
1 of 27
Download to read offline
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.
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
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
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
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
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
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).
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).
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
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.
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.
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.
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ć.
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
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.
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.
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
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.
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:
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
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:
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.
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.
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
(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.
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
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

More Related Content

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

Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaWydawnictwo Helion
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaWydawnictwo Helion
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaWydawnictwo Helion
 
ASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalistyASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalistyWydawnictwo Helion
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaWydawnictwo Helion
 
Access 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychAccess 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychWydawnictwo Helion
 
Microsoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraMicrosoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraWydawnictwo Helion
 
Bazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawBazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawWydawnictwo Helion
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPWydawnictwo Helion
 
Visual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NETVisual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NETWydawnictwo Helion
 
Wprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWydawnictwo Helion
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieWydawnictwo Helion
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoWydawnictwo Helion
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyWydawnictwo Helion
 
Excel. Programowanie dla profesjonalistów
Excel. Programowanie dla profesjonalistówExcel. Programowanie dla profesjonalistów
Excel. Programowanie dla profesjonalistówWydawnictwo Helion
 
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIPHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIWydawnictwo Helion
 

Similar to Visual Basic .NET. Bazy danych. Księga eksperta (20)

Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga eksperta
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
 
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązaniaJava. Aplikacje bazodanowe. Najlepsze rozwiązania
Java. Aplikacje bazodanowe. Najlepsze rozwiązania
 
ASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalistyASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalisty
 
Access 2007 PL. Kurs
Access 2007 PL. KursAccess 2007 PL. Kurs
Access 2007 PL. Kurs
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
 
Access 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danychAccess 2002. Tworzenie baz danych
Access 2002. Tworzenie baz danych
 
Delphi 7 i bazy danych
Delphi 7 i bazy danychDelphi 7 i bazy danych
Delphi 7 i bazy danych
 
Microsoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraMicrosoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratora
 
Bazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawBazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstaw
 
ASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHPASP.NET 3.5 dla programistów PHP
ASP.NET 3.5 dla programistów PHP
 
Visual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NETVisual Basic 2005. Wprowadzenie do programowania w .NET
Visual Basic 2005. Wprowadzenie do programowania w .NET
 
Wprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danychWprowadzenie do systemów baz danych
Wprowadzenie do systemów baz danych
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
 
Programowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdegoProgramowanie obiektowe w Visual Basic .NET dla każdego
Programowanie obiektowe w Visual Basic .NET dla każdego
 
Java. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalistyJava. Usługi WWW. Vademecum profesjonalisty
Java. Usługi WWW. Vademecum profesjonalisty
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
Access. Programowanie w VBA
Access. Programowanie w VBAAccess. Programowanie w VBA
Access. Programowanie w VBA
 
Excel. Programowanie dla profesjonalistów
Excel. Programowanie dla profesjonalistówExcel. Programowanie dla profesjonalistów
Excel. Programowanie dla profesjonalistów
 
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIPHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

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

  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. (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. 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. 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. (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. 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.