autori: Marko Petričević dipl.ing.,prof.; Danijel Kučak dipl.ing. urednica: Ana Rutar, prof. naslov: Pristup podacima iz programskog koda stručni recezenti: mr. sc. Goran Đambić; Bojan Petrović lektorica: Dijana Stilinović grafički urednik: Krešimir Pletikosa, ACE nakladnik: Algebra d.o.o., 2010. za nakladnika: mr.sc. Mislav Balković mjesto i godina izdavanja: Zagreb, 2010 Sva prava pridržana. Niti jedan dio ove knjige ne smije se reproducirati ili prenositi u bilo kojem obliku, niti na koji način. Zabranjeno je svako kopiranje, citiranje te upotreba knjige u javnim i privatnim edukacijskim organizacijama u svrhu organiziranih školovanja, a bez pisanog odobrenja nositelja autorskih prava. Copyright © Algebra d.o.o. CIP zapis dostupan u računalnom katalogu Nacionalne i sveučilišne knjižnice u Zagrebu pod brojem 743050 ISBN 978-953-322-022-2 Sadržaj: 1. Poglavlje: ...... UVOD ......................................................................................................................................................................... 5 1.1 Baze podataka ..................................................................................................................................................................... 6 1.2 RDBMS vs. OODBMS.......................................................................................................................................................... 6 1.3 Web-servisi .......................................................................................................................................................................... 7 1.4 Visual Studio ........................................................................................................................................................................ 7 1.5 Data Access Application Block............................................................................................................................................. 7 2. Poglavlje: ...... ADO.NET ................................................................................................................................................................... 9 2.1 Objektni model ADO.NET .................................................................................................................................................. 10 2.1.1 Povezano okruženje i podatkovni dobavljači ................................................................................................................ 11 2.1.2 Nepovezano okruženje ................................................................................................................................................. 14 3. Poglavlje: ...... RAD U POVEZANOM OKRUŽENJU ...................................................................................................................... 17 3.1 Povezivanje na bazu podataka .......................................................................................................................................... 18 3.1.1 Što je Connection objekt ............................................................................................................................................... 18 3.1.2 Povezivanje na SQL Server bazu podataka ................................................................................................................. 20 3.1.3 Povezivanje na druge baze podataka ........................................................................................................................... 23 3.1.4 ConnectionStringBuilder klasa ...................................................................................................................................... 24 3.1.5 Spremanje konekcijskih stringova u konfiguracijsku datoteku ...................................................................................... 26 3.1.6 Naredba using ............................................................................................................................................................... 27 3.1.7 Konekcijski događaji...................................................................................................................................................... 27 3.1.8 Konekcijske pričuve ...................................................................................................................................................... 29 3.2 Izvršavanje komandi .......................................................................................................................................................... 30 3.2.1 Svojstva Command klase.............................................................................................................................................. 30 3.2.2 Metode Command klase ............................................................................................................................................... 31 3.2.3 Izvršavanje SQL naredbi ............................................................................................................................................... 32 3.2.4 DataReader objekt i metoda ExecuteReader................................................................................................................ 34 3.2.5 Izvršavanje procedura ................................................................................................................................................... 35 3.2.6 Asinkrono izvršavanje komandi..................................................................................................................................... 36 3.2.7 Izvršavanje višestrukih SQL naredbi korištenjem DataReader objekta ........................................................................ 39 3.3 Rad s parametrima............................................................................................................................................................. 40 3.3.1 Tipovi (smjer) parametara ............................................................................................................................................. 41 3.3.2 Kreiranje parametara .................................................................................................................................................... 41 3.3.3 Dodavanje parametara Command objektima................................................................................................................ 41 3.3.4 Primjer kreiranja i izvršavanja parametriziranih komandi .............................................................................................. 42 3.4 Spremanje i dohvaćanje BLOB vrijednosti ......................................................................................................................... 45 3.4.1 Primjer spremanja i dohvaćanja BLOB vrijednosti ........................................................................................................ 46 3.5 Transakcije ......................................................................................................................................................................... 50 3.5.1 Postavljanje izolacijske razine transakcije .................................................................................................................... 51 3.5.2 Primjer korištenja Transaction objekta .......................................................................................................................... 52 3.5.3 TransactionScope klasa ................................................................................................................................................ 53 4. Poglavlje: ...... PRISTUP PODACIMA IZ JAVA APLIKACIJA........................................................................................................ 55 4.1 Uvod ................................................................................................................................................................................... 56 4.2 JDBC .................................................................................................................................................................................. 56 4.3 JDBC aplikacijsko programsko sučelje .............................................................................................................................. 57 4.3.1 Učitavanje pogonskog programa .................................................................................................................................. 58 4.3.2 Kreiranje konekcije ........................................................................................................................................................ 59 4.3.3 Kreiranje naredbe.......................................................................................................................................................... 59 5. Poglavlje: ...... NAPREDNI JDBC KONCEPTI ................................................................................................................................ 65 5.1 Metapodaci......................................................................................................................................................................... 66 5.2 Sučelje PreparedStatement ............................................................................................................................................... 69 5.3 Izvršavanje pohranjenih procedura .................................................................................................................................... 72 5.4 Rad s transakcijama........................................................................................................................................................... 74 6. Poglavlje: ...... RAD U NEPOVEZANOM OKRUŽENJU ................................................................................................................. 79 6.1 Rad s podacima u nepovezanom okruženju ...................................................................................................................... 80 6.2 DataSet objekti ................................................................................................................................................................... 80 6.2.1 Kreiranje DataSet objekata u kôdu ............................................................................................................................... 80 6.2.2 Spajanje DataSet objekata............................................................................................................................................ 81 6.2.3 Kopiranje DataSet objekata .......................................................................................................................................... 83 6.3 DataTable objekti ............................................................................................................................................................... 83 6.3.1 Kreiranje DataTable objekta.......................................................................................................................................... 83 6.3.2 Kreiranje stupaca .......................................................................................................................................................... 83 6.3.3 Validacijska svojstva i ograničenja ................................................................................................................................ 84 6.3.4 Dodavanje redaka ......................................................................................................................................................... 86 6.3.5 Izmjena podataka .......................................................................................................................................................... 87 6.3.6 Rad s null vrijednostima ................................................................................................................................................ 87 6.3.7 Brisanje podataka ......................................................................................................................................................... 87 6.3.8 Upravljanje izmjenama DataRow objekata ................................................................................................................... 88 6.3.9 Prihvaćanje i odbijanje izmjena u DataTable objektu.................................................................................................... 88 6.3.10 Događaji DataTable objekta .......................................................................................................................................... 88 6.3.11 Greške u DataRow objektima ....................................................................................................................................... 89 6.3.12 Primjer kreiranja i rada s DataTable objektom .............................................................................................................. 89 6.4 DataAdapter objekti............................................................................................................................................................ 93 6.4.1 Kreiranje komandi za upis, izmjenu i brisanje ............................................................................................................... 93 6.4.2 Dohvaćanje i spremanje podataka ................................................................................................................................ 94 6.4.3 Rješavanje sukoba (konflikata) kod dohvaćanja podataka u DataSet .......................................................................... 94 6.4.4 Rješavanje konflikata pri spremanju promjena u bazu ................................................................................................. 96 6.4.5 Izvršavanje grupnih operacija pomoću DataAdapter objekata ...................................................................................... 99 6.4.6 Primjer kreiranja DataAdapter objekta kroz kôd............................................................................................................ 99 6.5 Rad s XML-om u DataSet objektima ................................................................................................................................ 100 6.5.1 Spremanje podataka iz DataSet objekta u XML ......................................................................................................... 101 6.5.2 Spremanje definicijske sheme DataSet objekta kao XML sheme ............................................................................... 101 6.5.3 Učitavanje DataSet objekta iz XML toka ili dokumenta ............................................................................................... 101 6.5.4 Učitavanje definicijske sheme u DataSet objekt iz XML tijeka ili dokumenta .............................................................. 101 6.5.5 Sinkroniziranje DataSet objekta s XmlDataDocument objektom ................................................................................ 101 6.5.6 Pozivanje XPath upita na DataSet objektu ................................................................................................................. 102 6.5.7 Primjer spremanja i učitavanja DataSet objekta u i iz XML-a ..................................................................................... 102 6.6 DataView objekti .............................................................................................................................................................. 103 6.6.1 Kreiranje DataView objekata ....................................................................................................................................... 103 6.6.2 Razvrstavanje (sortiranje) podataka ........................................................................................................................... 103 6.6.3 Filtriranje podataka...................................................................................................................................................... 103 6.6.4 Pregled podataka ........................................................................................................................................................ 104 6.6.5 Izmjena podataka ........................................................................................................................................................ 104 6.6.6 Pretraživanje ............................................................................................................................................................... 104 6.6.7 Navigiranje povezanim podacima ............................................................................................................................... 105 6.6.8 Događaji DataView objekta ......................................................................................................................................... 105 6.6.9 Postavljanje predodređenih DataView objekata korištenjem DataViewManagera ..................................................... 105 6.6.10 Primjer korištenja DataView objekta ........................................................................................................................... 105 7. Poglavlje: ...... DATA ACCESS APPLICATION BLOCK .............................................................................................................. 109 7.1 Data Access Application Block i SqlHelper klasa ............................................................................................................ 110 7.1.1 Primjer korištenja SqlHelper klase .............................................................................................................................. 110 8. Poglavlje: ...... VISUAL STUDIO – ALATI ..................................................................................................................................... 113 8.1 Server Explorer ................................................................................................................................................................ 114 8.1.1 Dodavanje konekcija ................................................................................................................................................... 114 8.2 DataSet dizajner............................................................................................................................................................... 115 8.2.1 Primjer kreiranja DataSet objekta pomoću DataSet dizajnera .................................................................................... 115 8.3 Data Source Configuration Wizard................................................................................................................................... 118 8.3.1 Primjer kreiranja tipiziranog DataSeta pomoću Data Source Configuration Wizarda ................................................. 118 8.4 Konfiguriranje (netipiziranih) DataSet objekata pomoću alata Visual Studia ................................................................... 121 8.4.1 Primjer korištenja kolekcijskih editora: Tables, Columns, Relations, Constraints ....................................................... 121 8.5 Data Adapter Configuration Wizard ................................................................................................................................. 126 8.5.1 Primjer kreiranja DataAdaptera pomoću Data Adapter Configuration Wizarda .......................................................... 127 9. Poglavlje: ...... PODATKOVNO-POVEZIVE KONTROLE ............................................................................................................. 131 9.1 Rad u Windows Forms aplikacijama ................................................................................................................................ 132 9.1.1 Kreiranje podatkovno-povezane forme pomoću alata Visual Studia .......................................................................... 132 9.1.2 Povezivanje kontrola s podacima................................................................................................................................ 133 9.1.3 Rad s DataGridView kontrolom ................................................................................................................................... 137 9.2 Rad u web-okruženju ....................................................................................................................................................... 142 9.2.1 Podatkovno-poveziva svojstva .................................................................................................................................... 143 9.2.2 Načelo inicijalnog punjenja kontrola podacima i PostBack mehanizam ..................................................................... 147 9.2.3 Primjeri povezivanja temeljenog na klasičnim podatkovnim izvorima ......................................................................... 147 9.2.4 Spremanje promjena u bazu ....................................................................................................................................... 150 9.2.5 GridView kontrola ........................................................................................................................................................ 150 9.2.6 DataSource komponente ............................................................................................................................................ 156 9.2.7 Podatkovno-povezivajući izrazi i jednostavno podatkovno povezivanje ..................................................................... 161 10. Poglavlje: .... RAD S XML-OM .................................................................................................................................................... 167 10.1 XML .................................................................................................................................................................................. 168 10.1.1 Čitanje i zapisivanje XML-a pomoću XmlReader i XmlWriter klasa ............................................................................ 168 10.1.2 XmlReader klasa ......................................................................................................................................................... 168 10.1.3 XmlWriter klasa ........................................................................................................................................................... 170 10.1.4 Primjer korištenja XmlReader i XmlWriter klasa ......................................................................................................... 172 10.2 XML DOM ........................................................................................................................................................................ 174 10.2.1 XmlDocument klasa .................................................................................................................................................... 174 11. Poglavlje: .... ENTITETSKA OKOLINA ....................................................................................................................................... 181 11.1 ADO.NET Entity Framework ............................................................................................................................................ 182 11.1.1 Entiteti ......................................................................................................................................................................... 183 11.1.2 Pozadinska podrška .................................................................................................................................................... 184 11.1.3 Primjer kreiranja EDM modela .................................................................................................................................... 184 11.1.4 Jednina ili množina naziva generiranih entiteta .......................................................................................................... 187 11.1.5 Dizajnerska podrška za rad u entitetskom podatkovnom modelu ............................................................................... 187 11.1.6 Unutrašnja struktura entitetskog podatkovnog modela ............................................................................................... 189 11.2 Zadavanje upita u entitetskoj okolini ................................................................................................................................ 191 11.2.1 LINQ to Entities i sintaksne opcije............................................................................................................................... 192 11.2.2 Entity SQL ................................................................................................................................................................... 193 11.2.3 11.2.4 11.2.5 11.2.6 11.2.7 11.2.8 EntityClient .................................................................................................................................................................. 194 Odgođeno i trenutačno izvršavanje upita .................................................................................................................... 195 Rad s entitetima .......................................................................................................................................................... 196 EDM i procedure ......................................................................................................................................................... 202 Odnosi i asocijacije ..................................................................................................................................................... 209 Podatkovno povezivanje s entitetskom okolinom........................................................................................................ 211 12. Poglavlje: .... INDEKS .................................................................................................................................................................. 215 13. Poglavlje: .... POPIS LITERATURE ............................................................................................................................................ 219 3. Poglavlje: RAD U POVEZANOM OKRUŽENJU U ovom poglavlju naučit ćete: ; ; ; ; ; Uspostaviti vezu s bazom podataka Koristiti komande Upotrebljavati parametre u komandama Pomoću komandi pozivati procedure Koristiti transakcije Str.18§ 3.1 §PRISTUP PODACIMA IZ PROGRAMSKOG KODA Povezivanje na bazu podataka Većinom se ADO.NET programski model temelji na neovisnim koracima u ostvarivanju komunikacije s bazom podataka. Najprije kreiramo vezu s bazom, zatim kreiramo komandu koja izvršava određeni upit i konačno dobivamo podatke. To je načelo isto koristimo li bilo koji od prethodno spomenutih podatkovnih dobavljača. Klase koje koristimo za povezivanje na bazu nalaze se unutar imenskog prostora System.Data i, ovisno o vrsti baze i podatkovnog dobavljača koje koristimo, unutar određenog njegovog podprostora. 3.1.1 Što je Connection objekt Connection objekt predstavlja otvorenu vezu (konekciju) s bazom podataka. Connection objekt ne dohvaća niti izmjenjuje podatke, ne izvršava komande i ne sadržava rezultate njihovih upita. Connection objekt je naprosto poveznica koju koriste komande i upiti za slanje svojih SQL naredbi i primanje rezultata. Iako Connection objekti tipično mogu biti shvaćeni kao mjesto gdje postavljamo svoje konekcijske stringove, oni također posjeduju dodatne metode, kao što su metode za otvaranje i zatvaranje konekcija ili metode za rad s transakcijama i konekcijskim pričuvama (engl. connection pools). Drugim riječima, Connection objekti omogućuju cjevovode za slanje komandi u bazu i dohvaćanje podataka i informacija u aplikaciju. Komande i upiti Connection objekt Baza podataka Informacije iz baze podataka i vraćeni podaci Slika 3.1: Connection objekti su komunikacijski cjevovodi između aplikacije i baze podataka 3.1.1.1 Svojstva, metode i događaji Connection klase Svojstva, metode i događaji Connection objekata variraju ovisno o vrsti baze i podatkovnom dobavljaču, ali svaki Connection objekt sadržava iste članove naslijeđene iz bazne klase System.Data.Common.DbConnection. Zajednički članovi Connection objekata prikazani su u sljedećim tablicama: tel: 01 2222 182, e-mail: info@racunarstvo.hr §www.racunarstvo.hr§ Str.19§ §3. POGLAVLJE: RAD U POVEZANOM OKRUŽENJU Naziv Opis ConnectionString Dohvaća ili postavlja konekcijski string za otvaranje konekcije. ConnectionTimeout Samo za čitanje (engl. read-only). Dohvaća vrijeme čekanja na uspostavu veze. U slučaju isteka generira se greška. Database Samo za čitanje. Dohvaća ime tekuće baze nakon što je konekcija otvorena ili ime specificirano u konekcijskom stringu prije otvaranja konekcije. DataSource Samo za čitanje. Dohvaća ime servera na koji je Connection objekt povezan. ServerVersion Samo za čitanje. Dohvaća string koji predstavlja verziju servera na koji je Connection objekt povezan. State Samo za čitanje. Dohvaća string koji opisuje stanje konekcije. Tablica 3.1: Zajednička svojstva Connection objekata Naziv Opis BeginTransaction Pokreće transakciju u bazi podataka. ChangeDatabase Mijenja trenutačnu bazu podataka otvorene konekcije. Close Zatvara konekciju s bazom. Ovo je preferirana metoda za zatvaranje otvorene konekcije. CreateCommand Kreira i vraća System.Data.Common.DbCommand objekt povezan s pozivajućim Connection objektom. GetSchema Vraća definicijsku (informacijsku) shemu (engl. schema information) izvora podataka pozivajućeg Connection objekta. New Inicijalizira novu instancu Connection klase. OnStateChange Podiže System.Data.Common.DbConnection.StateChange događaj. Open Otvara konekciju s bazom prema postavkama specificiranim preko ConnectionString svojstva. Tablica 3.2: Zajedničke metode Connection objekata Naziv Opis StateChange Događa se pri promjeni stanja konekcije. InfoMessage Događa se kad server vrati upozoravajuću ili informativnu poruku. Tablica 3.3: Zajednički događaji Connection objekata Zagreb – Ilica 242 §Visoka škola za primijenjeno računarstvo § Str.20§ 3.1.2 §PRISTUP PODACIMA IZ PROGRAMSKOG KODA Povezivanje na SQL Server bazu podataka Kad je riječ o serverskoj bazi podataka, kao što je SQL Server, potrebno se najprije povezati sa serverom, a nakon toga specificirati bazu s kojom želimo raditi. Pri povezivanju sa SQL Serverom koristimo klase iz imenskih prostora System.Data i System.Data.SqlClient. Pogledajmo primjer konzolne aplikacije koja se povezuje na instancu SQL Servera pod imenom sqlexpress, koja se nalazi na lokalnom računalu: using System; using System.Data; using System.Data.SqlClient; namespace PovezivanjeNaSQLServer { class Program { static void Main(string[] args) { Console.WriteLine("Pritisnite neku tipku za povezivanje na SQL Server."); Console.ReadKey(); SqlConnection cn = new SqlConnection(); cn.ConnectionString = @"Server=.\sqlexpress;integrated security=true"; try { cn.Open(); if (cn.State == ConnectionState.Open) { Console.WriteLine("Uspješno ste se povezali."); Console.WriteLine("Pritisnite neku tipku za prekid veze..."); Console.ReadKey(); cn.Close(); if (cn.State == ConnectionState.Closed) { Console.WriteLine("Veza prekinuta."); } } else { Console.WriteLine("Povezivanje na SQL Server nije uspjelo."); } } catch (SqlException sqlEx) { Console.WriteLine("Dogodila se SQL greška: " + sqlEx.Message); } catch (Exception ex) { Console.WriteLine("Dogodila se greška: " + ex.Message); } finally { cn.Dispose(); } tel: 01 2222 182, e-mail: info@racunarstvo.hr §www.racunarstvo.hr§ Str.21§ } } §3. POGLAVLJE: RAD U POVEZANOM OKRUŽENJU } Console.WriteLine("Pritisnite neku tipku za kraj programa..."); Console.ReadKey(); Na početku programa kreirali smo objekt cn klase SqlConnection koji implementira metode i svojstva potrebna za uspostavljanje veze sa SQL Server bazom podataka. Napomena: SqlConnection klasa dio je imenskog prostora System.Data.SqlClient kojeg smo uveli (importirali) na početku programa. 3.1.2.1 Svojstvo ConnectionString Najvažnije svojstvo SqlConnection objekta je svojstvo ConnectionString jer se u njemu moraju postaviti svi ključni parametri za povezivanje na SQL Server. U tom smo svojstvu postavljanjem atributa server=.\sqlexpress odredili ime SQL Servera na koji se želimo povezati. Napomena: Znak . (točka) je zamjenski znak za ime lokalnog računala. Dakle, izraz .\sqlexpress označava da je SQL Server instaliran na lokalnom računalu i da je riječ o njegovoj imenovanoj instanci sqlexpress. Ako ime instance nije postavljeno, tj. ako je na lokalnom računalu instalirana samo predodređena instanca SQL Servera, tada će njezino ime biti upravo ime računala (tj. ako je riječ o lokalnom računalu, samo .). Drugi atribut integrated security=true određuje način autentifikacije korisnika koji se povezuje na SQL Server i, u našem primjeru, određuje da se za autentifikaciju koristi Windows korisnički račun (engl. Windows authentication mode). Znak točka-zarez (;) unutar konekcijskog stringa koristi se za razdvajanje atributa. 3.1.2.2 Metoda Open Nakon ispravnog postavljanja konekcijskog stringa, veza sa SQL Serverom može se uspostaviti pozivom metode Open. Budući da SQL Server nije integralni dio našeg programa, poziv metode Open spada u kritične operacije. Naime, može se dogoditi da je iz nekog razloga SQL Server nedostupan (ili nije pokrenut ili se, ako nije na lokalnom računalu, mogu pojaviti problemi s mrežom...) što će rezultirati izbacivanjem iznimke u našem programu. Stoga je dio kôda u kojem se aplikacija treba povezati i komunicirati s otvorenom vezom prema SQL Serveru potrebno staviti unutar try‐catch bloka. 3.1.2.3 SqlException klasa Ako pri uspostavi veze s SQL Serverom dođe do izbacivanja iznimke (ili do izbacivanja iznimke dođe zbog bilo kakve druge greške koja se dogodila izvršavanjem neke naredbe na SQL Serveru), ta će iznimka biti tipa SqlException i moguće ju je presresti i obraditi prije nego se obavi obrada neke općenite iznimke tipa Exception. Stavimo li poseban catch block u kojem specificiramo hvatanje iznimke specijalno tipa SqlException, kao u primjeru, tada će taj catch blok uhvatiti sve iznimke koje su se dogodile u radu sa SQL Serverom i moći ćemo ih obraditi na odgovarajući način. Izbaci li se iznimka nekog drugog tipa, nju će svakako uhvatiti drugi catch blok iz primjera, u kojem je tu grešku moguće razriješiti na neki drugi način. Zagreb – Ilica 242 §Visoka škola za primijenjeno računarstvo § Str.22§ §PRISTUP PODACIMA IZ PROGRAMSKOG KODA Sljedeća slika prikazuje rezultat pokretanja programa dok je SQL Server bio stopiran. Primijetimo da se na konzoli ispisao tekst: „Dogodila se SQL greška...“, što svjedoči da je uhvaćena iznimka SqlException tipa koju je obradio prvi catch blok. Slika 3.2: Greška pri povezivanju na SQL Server 3.1.2.4 State svojstvo Pomoću State svojstva SqlConnection objekta moguće je ispitati u kojem se stanju trenutačno nalazi konekcija sa SQL Serverom. Moguće vrijednosti ovog svojstva učahurene su u enumeraciji ConnectionState koja je dio imenskog prostora System.Data. U primjeru nakon poziva metode Open provjeravamo je li veza otvorena i ako jest, ispisujemo to na konzolu, a zatim zatvaramo vezu pozivom metode Close i rezultat opet ispisujemo na konzolu. Nakon pokretanja programa i uspješnog povezivanja sa SQL Serverom, dobit ćemo rezultat kao na slici: Slika 3.3: Povezivanje sa SQL Serverom 3.1.2.5 Dispose i Close metode SqlConnection objekt troši dosta računalnih resursa i stoga trebamo biti pažljivi s njegovim korištenjem. Čim nam veza s bazom više nije potrebna, potrebno ju je otpustiti pozivom metode Dispose, što će na ispravan način otpustiti sve korištene resurse. No u slučaju izbacivanja iznimke može se dogoditi da veza sa SQL Serverom ostane otvorena i njezini resursi zadržani. Zato smo metodu Dispose pozvali u finally bloku našeg primjera pa će se, bez obzira na ishod pokušaja povezivanja sa SQL Serverom (i u slučaju greške i u slučaju uspješnog povezivanja), konekcija otpustiti. Metoda Close koju smo koristili u primjeru zatvara konekciju s bazom, ali ne otpušta određene resurse operacijskog sustava (engl. unmanaged resources) potrebne za ponovno otvaranje konekcije. Zbog toga metodu Close trebamo koristiti ako ćemo istu konekciju ponovno otvarati. Ukratko, metoda Close zatvara konekciju, ali zadržava druge resurse u pripremi za ponovno otvaranje konekcije. Metoda Dispose prvo interno zove metodu Close, a zatim otpušta sve resurse. tel: 01 2222 182, e-mail: info@racunarstvo.hr §www.racunarstvo.hr§ Str.23§ §3. POGLAVLJE: RAD U POVEZANOM OKRUŽENJU 3.1.2.6 Povezivanje s bazom U prethodnom smo primjeru kreirali konekciju koja se uspješno povezivala sa SQL Serverom, ali nismo specificirali na koju se bazu želimo povezati. To možemo učiniti postavljanjem atributa Database. Na primjer, za povezivanje na bazu pod nazivom ADONET, koja se nalazi na instanci SQL Servera pod nazivom sqlexpress na lokalnom računalu, pomoću Windows autentifikacije, konekcijski string bi mogao izgledati ovako: cn.ConnectionString = @"server=.\sqlexpress;database=ADONET;integrated security=true"; 3.1.2.7 SQL Server autentifikacija Predodređeni način autentifikacije na SQL Serveru jest Windows autentifikacija. Dakle, korisnik koji se prijavi na Windows operativni sustav, koristi isti korisnički račun i na SQL Serveru. SQL Server brine o tome ima li određeni Windows korisnički račun ovlasti povezivanja na server, kao i na svaku pojedinu bazu. Osim Windows autentifikacije, postoji mogućnost da se dodatno omogući i SQL Server autentifikacija. Tada se unutar SQL Servera mogu definirati korisnici koji se na server posebno prijavljuju pomoću korisničkog imena i lozinke. Na primjer, ako se na lokalnu instancu sqlexpress i bazu ADONET želimo povezati pomoću SQL Server autentifikacije, s korisničkim imenom pero i lozinkom racunarstvo, tada bi konekcijski string mogao izgledati ovako: cn.ConnectionString = @"server=.\sqlexpress;database=ADONET;uid=pero;pwd=racunarstvo"; 3.1.3 Povezivanje na druge baze podataka Za povezivanje s drugim bazama podataka koristimo druge podatkovne dobavljače. Na primjer, za povezivanje na Access bazu podataka možemo koristiti podatkovni dobavljač .NET Framework Data Provider for OLE DB, čije se klase nalaze unutar imenskog prostora System.Data.OleDb, dok se za povezivanje na Oracle bazu koristi podatkovni dobavljač .NET Framework Data Provider for Oracle i klase imenskog prostora System.Data.OracleClient. Bitno je, međutim, naglasiti da u komuniciranju s bilo kojom bazom temeljno načelo rada ostaje isto. 3.1.3.1 Povezivanje na Access Da bismo se povezali na Accessovu bazu podataka pod nazivom Baza.mdb (Access 2003), gotovo u potpunosti možemo iskoristiti programski kôd za povezivanje sa SQL serverom iz prethodnog primjera. Jedine tri linije kôda koje trebamo izmijeniti su: 1. Importirati imenski prostor System.Data.OleDb: using System.Data.OleDb; 2. Kreirati OleDbConnection objekt: OleDbConnection cn = new OleDbConnection(); 3. Specificirati konekcijski string: cn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Baza.mdb; Persist Security Info=True"; Zagreb – Ilica 242 §Visoka škola za primijenjeno računarstvo § Str.24§ §PRISTUP PODACIMA IZ PROGRAMSKOG KODA 3.1.3.2 Povezivanje na Oracle Za povezivanje na Oracle bazu moramo napraviti sljedeće korake: 1. Importirati imenski prostor System.Data.OracleClient: using System.Data.OracleClient; 2. Kreirati OracleConnection objekt: OracleConnection cn = new OracleConnection(); 3. Specificirati konekcijski string: cn.ConnectionString = @"Data Source=(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521))) (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL))); User Id=korisnickoIme;Password=lozinka;"; Na sličan se način možemo povezati s bilo kojim izvorom podataka koji podržava neki od .NET podatkovnih dobavljača. Napomena: Budući da je specificiranje konekcijskog stringa zapravo jedini konkretni postupak kojeg treba učiniti, dobro je znati da se na internetskoj stranici www.connectionstrings.com nalaze primjeri konekcijskih stringova za sve poznatije baze podataka. 3.1.4 ConnectionStringBuilder klasa Svi parametri potrebni za povezivanje na bilo koju bazu podataka navode se kao parovi oblika ključ=vrijednost, međusobno odvojeni točka-zarezima u ConnectionString svojstvu Connection objekta. Nazivi i broj parametara ovise o podatkovnom dobavljaču i vrsti baze podataka na koju se povezujemo. Za SQL Server bazu podataka podržani parametri konekcijskog stringa dani su u sljedećoj tablici: Parametar Opis Application Name Ime klijentske aplikacije ili .Net SqlClient Data Provider ako ime aplikacije nije navedeno. Async Postavljeno na true, ovo svojstvo omogućuje asinkrone operacije. Nije podržano u ADO.NET 1.x. ili Puno ime .mdf datoteke koja se može koristiti kao priložena datoteka baze podataka. AttachDBFileName Initial File Name Connection Timeout Maksimalan broj sekundi koliko Connection objekt čeka odgovor baze o uspješnom povezivanju. Predodređena vrijednost je 15 sekundi. Current Language Jezik koji koristi SQL Server. DataBase Catalog Encrypt ili Initial Ime baze na koju se povezujemo. Upućuje na to treba li koristiti SSL (engl. Secure Socets Layer) tel: 01 2222 182, e-mail: info@racunarstvo.hr §www.racunarstvo.hr§ Str.25§ §3. POGLAVLJE: RAD U POVEZANOM OKRUŽENJU enkripciju za razmjenu podataka između klijenta i servera. Na serveru treba biti instaliran certifikat. Predodređena vrijednost je false. Failover Partner Integrated Security Trusted_Connection Ime servera partnera kojem će se pristupati u slučaju neuspješnog povezivanja s primarnim serverom. Nije podržano u ADO.NET 1.x. ili Upućuje na to koristi li se za autentikaciju trenutačni Windows korisnički račun. Kad je ovo svojstvo postavljeno na vrijednost false, tada moraju biti navedeni user ID i password. Specijalna vrijednost sspi znači isto što i true. Predodređena vrijednost je false. MultipleActiveResultSets Kad je podešeno na vrijednost true, aplikacija može držati više aktivnih skupova podataka iz baze. Ova značajka postoji od verzije SQL Server 2005. Nije podržana u ADO.NET 1.x. Network Library ili Net Određuje mrežnu biblioteku koja se koristi za uspostavu veze s SQL Serverom. Predodređen je dbmssocn, koji se temelji na TCP/IP. Packet Size Veličina paketa (u bajtovima) koji se koriste za razmjenu podataka između klijenta i SQL servera. Predodređeno je 8192. Password ili pwd Lozinka kojom se prijavljujemo na SQL Server. Persist Security Info Upućuje na to treba li se uključiti informacija o lozinki u stringu vraćenom kao ConnectionString svojstvo. Predodređena vrijednost je false. Server ili Data Source Naziv ili mrežna adresa SQL Servera na koji se spajamo. User ID ili uid Korisničko ime kojim se prijavljujemo na SQL Server. Workstation ID Ime računala koje se prijavljuje na SQL Server. Tablica 3.4: Neki od podržanih parametara konekcijskog stringa za vezu s SQL serverom Iz prethodne tablice možemo zaključiti da poveći broj ključnih riječi potrebnih za povezivanje s bazom podataka može predstavljati problem, osobito ako uzmemo u obzir da su one specifične za bazu na koju se spajamo. Stoga je u ADO.NET-u za svaki podatkovni dobavljač implementirana klasa ConnectionStringBuilder koja preko svojih svojstava olakšava generiranje konekcijskih stringova. Kako za povezivanje na SQL server koristimo imenski prostor System.Data.SqlClient, ime odgovarajuće klase za taj podatkovni dobavljač je SqlConnectionStringBuilder. Pomoću SqlConnectionStringBuilder objekta generiranje konekcijskog stringa za spajanje na SQL Server bazu izgleda ovako: SqlConnectionStringBuilder csBuilder = new SqlConnectionStringBuilder(); csBuilder.DataSource = <ime servera>; csBuilder.InitialCatalog = <ime baze>; csBuilder.IntegratedSecurity = true; csBuilder.UserID = <korisničko ime>; csBuilder.Password = <lozinka>; ... string connString = csBuilder.ConnectionString; Zagreb – Ilica 242 §Visoka škola za primijenjeno računarstvo § Str.26§ §PRISTUP PODACIMA IZ PROGRAMSKOG KODA Dakle, nakon instanciranja objekta klase SqlConnectionStringBuilder, kroz postavljanje njegovih pojedinačnih svojstava najprije se određuju potrebni parametri konekcijskog stringa. Sastavljeni konekcijski string zatim dobivamo pozivom svojstva ConnectionString te ga možemo dodijeliti ConnectionString svojstvu SqlConnection objekta. Koristimo li neku drugu bazu podataka, možemo upotrijebiti ConnectionStringBuilder klasu njoj odgovarajućeg podatkovnog dobavljača. Na primjer, za imenski prostor System.Data.OleDb pripadajuća klasa će se zvati OleDbConnectionStringBuilder, dok će za System.Data.Odbc to biti OdbcConnectionStringBuilder. Napomena: Korištenje ConnectionStringBuilder objekta naročito je preporučljivo (umjesto običnog spajanja stringova) ako konekcijske parametre upisuje korisnik aplikacije, zbog smanjenja mogućnosti zlonamjernih upada u bazu. 3.1.5 Spremanje konekcijskih stringova u konfiguracijsku datoteku Ako konekcijske stringove spremimo kao dio programskog kôda, to znači da se pri svakoj migraciji ili promjeni aplikacijske baze podataka aplikacija mora iznova prevoditi. Stoga je u .NET-u omogućeno spremanje konekcijskih stringova unutar konfiguracijske datoteke (datoteka app.config ako je riječ o desktop-aplikaciji ili Web.Config datoteka ako je riječ o web-aplikaciji), u sekciju <connectionStrings>, na sljedeći način: <connectionStrings> <add name="imeKonekcijskogStringa" connectionString="SERVER=...;DATABASE=...;UID=...;PWD=..." providerName="System.Data.SqlClient" /> </connectionStrings> Svaki konekcijski string predstavljen je jednim <add> elementom koji ima tri atributa: 1. name – sadržava ime konekcijskog stringa, 2. connectionString – sadržava konekcijski string, 3. providerName – sadržava ime podatkovnog dobavljača kojeg koristimo. 3.1.5.1 Dohvaćanje konekcijskih stringova iz konfiguracijske datoteke Kad je konekcijski string spremljen u konfiguracijsku datoteku unutar <connectionStrings> sekcije, možemo ga dohvatiti pomoću klase ConfigurationManager koja se nalazi unutar imenskog prostora System.Configuration, kako prikazuje sljedeći kôdni isječak: cn.ConnectionString = ConfigurationManager .ConnectionStrings["imeKonekcijskogStringa"].ConnectionString; Napomena: Da bismo mogli koristiti klasu ConfigurationManager, u projekt treba biti dodana referenca do datoteke System.Configuration.dll, a u klasi u kojoj je pozivamo importiran imenski prostor System.Configuration. tel: 01 2222 182, e-mail: info@racunarstvo.hr §www.racunarstvo.hr§
© Copyright 2024 Paperzz