Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

autori:

Marko Petrievi dipl.ing.,prof.; Danijel


Kuak dipl.ing.
urednica:

Ana Rutar, prof.


naslov:

Pristup podacima iz programskog koda


struni recezenti:

mr. sc. Goran ambi; Bojan Petrovi


lektorica:

Dijana Stilinovi
grafiki urednik:

Kreimir Pletikosa, ACE


nakladnik:

Algebra d.o.o., 2010.


za nakladnika:

mr.sc. Mislav Balkovi


mjesto i godina izdavanja:

Zagreb, 2010

Sva prava pridrana. Niti jedan dio ove


knjige ne smije se reproducirati ili prenositi
u bilo kojem obliku, niti na koji nain.
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 raunalnom katalogu
Nacionalne i sveuiline knjinice u Zagrebu
pod brojem 743050

ISBN978-953-322-022-2

Sadraj:
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 okruenje i podatkovni dobavljai ................................................................................................................ 11
2.1.2
Nepovezano okruenje ................................................................................................................................................. 14
3. Poglavlje:......RAD U POVEZANOM OKRUENJU ...................................................................................................................... 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 dogaaji...................................................................................................................................................... 27
3.1.8
Konekcijske priuve ...................................................................................................................................................... 29
3.2
Izvravanje komandi .......................................................................................................................................................... 30
3.2.1
Svojstva Command klase.............................................................................................................................................. 30
3.2.2
Metode Command klase ............................................................................................................................................... 31
3.2.3
Izvravanje SQL naredbi ............................................................................................................................................... 32
3.2.4
DataReader objekt i metoda ExecuteReader................................................................................................................ 34
3.2.5
Izvravanje procedura ................................................................................................................................................... 35
3.2.6
Asinkrono izvravanje komandi..................................................................................................................................... 36
3.2.7
Izvravanje viestrukih SQL naredbi koritenjem 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 izvravanja parametriziranih komandi .............................................................................................. 42
3.4
Spremanje i dohvaanje BLOB vrijednosti ......................................................................................................................... 45
3.4.1
Primjer spremanja i dohvaanja BLOB vrijednosti ........................................................................................................ 46
3.5
Transakcije ......................................................................................................................................................................... 50
3.5.1
Postavljanje izolacijske razine transakcije .................................................................................................................... 51
3.5.2
Primjer koritenja 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 suelje .............................................................................................................................. 57
4.3.1
Uitavanje 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
Suelje PreparedStatement ............................................................................................................................................... 69
5.3
Izvravanje pohranjenih procedura .................................................................................................................................... 72
5.4
Rad s transakcijama........................................................................................................................................................... 74
6. Poglavlje:......RAD U NEPOVEZANOM OKRUENJU ................................................................................................................. 79
6.1
Rad s podacima u nepovezanom okruenju ...................................................................................................................... 80
6.2
DataSet objekti ................................................................................................................................................................... 80
6.2.1
Kreiranje DataSet objekata u kdu ............................................................................................................................... 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 ogranienja ................................................................................................................................ 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
Prihvaanje i odbijanje izmjena u DataTable objektu.................................................................................................... 88
6.3.10 Dogaaji DataTable objekta .......................................................................................................................................... 88
6.3.11 Greke 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
Dohvaanje i spremanje podataka ................................................................................................................................ 94
6.4.3
Rjeavanje sukoba (konflikata) kod dohvaanja podataka u DataSet .......................................................................... 94
6.4.4
Rjeavanje konflikata pri spremanju promjena u bazu ................................................................................................. 96
6.4.5
Izvravanje grupnih operacija pomou DataAdapter objekata ...................................................................................... 99
6.4.6
Primjer kreiranja DataAdapter objekta kroz kd............................................................................................................ 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
Uitavanje DataSet objekta iz XML toka ili dokumenta ............................................................................................... 101
6.5.4
Uitavanje 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 uitavanja 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
Pretraivanje ............................................................................................................................................................... 104
6.6.7
Navigiranje povezanim podacima ............................................................................................................................... 105
6.6.8
Dogaaji DataView objekta ......................................................................................................................................... 105
6.6.9
Postavljanje predodreenih DataView objekata koritenjem DataViewManagera ..................................................... 105
6.6.10 Primjer koritenja DataView objekta ........................................................................................................................... 105
7. Poglavlje:......DATA ACCESS APPLICATION BLOCK .............................................................................................................. 109
7.1
Data Access Application Block i SqlHelper klasa ............................................................................................................ 110
7.1.1
Primjer koritenja 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 pomou DataSet dizajnera .................................................................................... 115
8.3
Data Source Configuration Wizard................................................................................................................................... 118
8.3.1
Primjer kreiranja tipiziranog DataSeta pomou Data Source Configuration Wizarda ................................................. 118
8.4
Konfiguriranje (netipiziranih) DataSet objekata pomou alata Visual Studia ................................................................... 121
8.4.1
Primjer koritenja kolekcijskih editora: Tables, Columns, Relations, Constraints ....................................................... 121
8.5
Data Adapter Configuration Wizard ................................................................................................................................. 126
8.5.1
Primjer kreiranja DataAdaptera pomou 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 pomou 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-okruenju ....................................................................................................................................................... 142
9.2.1
Podatkovno-poveziva svojstva .................................................................................................................................... 143
9.2.2
Naelo inicijalnog punjenja kontrola podacima i PostBack mehanizam ..................................................................... 147
9.2.3
Primjeri povezivanja temeljenog na klasinim 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-povezivajui 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 pomou XmlReader i XmlWriter klasa ............................................................................ 168
10.1.2 XmlReader klasa ......................................................................................................................................................... 168
10.1.3 XmlWriter klasa ........................................................................................................................................................... 170
10.1.4 Primjer koritenja 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 podrka .................................................................................................................................................... 184
11.1.3 Primjer kreiranja EDM modela .................................................................................................................................... 184
11.1.4 Jednina ili mnoina naziva generiranih entiteta .......................................................................................................... 187
11.1.5 Dizajnerska podrka za rad u entitetskom podatkovnom modelu ............................................................................... 187
11.1.6 Unutranja 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


Odgoeno i trenutano izvravanje 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 OKRUENJU

U ovom poglavlju nauit ete:

;
;
;
;
;

Uspostaviti vezu s bazom podataka


Koristiti komande
Upotrebljavati parametre u komandama
Pomou komandi pozivati procedure
Koristiti transakcije

Str.18

3.1

PRISTUP PODACIMA IZ PROGRAMSKOG KODA

Povezivanje na bazu podataka

Veinom se ADO.NET programski model temelji na neovisnim koracima u ostvarivanju


komunikacije s bazom podataka. Najprije kreiramo vezu s bazom, zatim kreiramo komandu koja
izvrava odreeni upit i konano dobivamo podatke. To je naelo isto koristimo li bilo koji od
prethodno spomenutih podatkovnih dobavljaa. Klase koje koristimo za povezivanje na bazu
nalaze se unutar imenskog prostora System.Data i, ovisno o vrsti baze i podatkovnog dobavljaa
koje koristimo, unutar odreenog njegovog podprostora.

3.1.1

to je Connection objekt

Connection objekt predstavlja otvorenu vezu (konekciju) s bazom podataka. Connection objekt
ne dohvaa niti izmjenjuje podatke, ne izvrava komande i ne sadrava rezultate njihovih upita.
Connection objekt je naprosto poveznica koju koriste komande i upiti za slanje svojih SQL naredbi
i primanje rezultata. Iako Connection objekti tipino mogu biti shvaeni kao mjesto gdje
postavljamo svoje konekcijske stringove, oni takoer posjeduju dodatne metode, kao to su
metode za otvaranje i zatvaranje konekcija ili metode za rad s transakcijama i konekcijskim
priuvama (engl. connection pools). Drugim rijeima, Connection objekti omoguuju cjevovode za
slanje komandi u bazu i dohvaanje podataka i informacija u aplikaciju.
Komande
i upiti
Connection
objekt

Baza podataka

Informacije iz
baze podataka i
vraeni podaci

Slika 3.1: Connection objekti su komunikacijski cjevovodi izmeu aplikacije i baze podataka

3.1.1.1 Svojstva, metode i dogaaji Connection klase


Svojstva, metode i dogaaji Connection objekata variraju ovisno o vrsti baze i podatkovnom
dobavljau, ali svaki Connection objekt sadrava iste lanove naslijeene iz bazne klase
System.Data.Common.DbConnection. Zajedniki lanovi Connection objekata prikazani su u
sljedeim tablicama:

tel: 01 2222 182, e-mail: info@racunarstvo.hr

www.racunarstvo.hr

Str.19

3. POGLAVLJE: RAD U POVEZANOM OKRUENJU

Naziv

Opis

ConnectionString

Dohvaa ili postavlja konekcijski string za otvaranje konekcije.

ConnectionTimeout Samo za itanje (engl. read-only). Dohvaa vrijeme ekanja na uspostavu


veze. U sluaju isteka generira se greka.
Database

Samo za itanje. Dohvaa ime tekue baze nakon to je konekcija


otvorena ili ime specificirano u konekcijskom stringu prije otvaranja
konekcije.

DataSource

Samo za itanje. Dohvaa ime servera na koji je Connection objekt


povezan.

ServerVersion

Samo za itanje. Dohvaa string koji predstavlja verziju servera na koji je


Connection objekt povezan.

State

Samo za itanje. Dohvaa string koji opisuje stanje konekcije.


Tablica 3.1: Zajednika svojstva Connection objekata

Naziv

Opis

BeginTransaction

Pokree transakciju u bazi podataka.

ChangeDatabase

Mijenja trenutanu bazu podataka otvorene konekcije.

Close

Zatvara konekciju s bazom. Ovo je preferirana metoda za zatvaranje


otvorene konekcije.

CreateCommand

Kreira i vraa System.Data.Common.DbCommand objekt povezan s


pozivajuim Connection objektom.

GetSchema

Vraa definicijsku (informacijsku) shemu (engl. schema information) izvora


podataka pozivajueg Connection objekta.

New

Inicijalizira novu instancu Connection klase.

OnStateChange

Podie System.Data.Common.DbConnection.StateChange dogaaj.

Open

Otvara konekciju s bazom prema postavkama specificiranim preko


ConnectionString svojstva.
Tablica 3.2: Zajednike metode Connection objekata

Naziv

Opis

StateChange

Dogaa se pri promjeni stanja konekcije.

InfoMessage

Dogaa se kad server vrati upozoravajuu ili informativnu poruku.


Tablica 3.3: Zajedniki dogaaji Connection objekata

Zagreb Ilica 242

Visoka

kola za primijenjeno raunarstvo

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 raunalu:
usingSystem;
usingSystem.Data;
usingSystem.Data.SqlClient;

namespacePovezivanjeNaSQLServer
{

classProgram

staticvoidMain(string[]args)

Console.WriteLine("PritisnitenekutipkuzapovezivanjenaSQLServer.");

Console.ReadKey();

SqlConnectioncn=newSqlConnection();

cn.ConnectionString=@"Server=.\sqlexpress;integratedsecurity=true";

try

cn.Open();

if(cn.State==ConnectionState.Open)

Console.WriteLine("Uspjenostesepovezali.");

Console.WriteLine("Pritisnitenekutipkuzaprekidveze...");

Console.ReadKey();

cn.Close();

if(cn.State==ConnectionState.Closed)

Console.WriteLine("Vezaprekinuta.");

else

Console.WriteLine("PovezivanjenaSQLServernijeuspjelo.");

catch(SqlExceptionsqlEx)

Console.WriteLine("DogodilaseSQLgreka:"+sqlEx.Message);

catch(Exceptionex)

Console.WriteLine("Dogodilasegreka:"+ex.Message);

finally

cn.Dispose();

tel: 01 2222 182, e-mail: info@racunarstvo.hr

www.racunarstvo.hr

Str.21

3. POGLAVLJE: RAD U POVEZANOM OKRUENJU

Console.WriteLine("Pritisnitenekutipkuzakrajprograma...");
Console.ReadKey();

Na poetku 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 poetku programa.

3.1.2.1 Svojstvo ConnectionString


Najvanije svojstvo SqlConnectionobjekta je svojstvo ConnectionString jer se u njemu moraju
postaviti svi kljuni 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 . (toka) je zamjenski znak za ime lokalnog raunala. Dakle, izraz
.\sqlexpress oznaava da je SQL Server instaliran na lokalnom raunalu i da je
rije o njegovoj imenovanoj instanci sqlexpress. Ako ime instance nije postavljeno,
tj. ako je na lokalnom raunalu instalirana samo predodreena instanca SQL
Servera, tada e njezino ime biti upravo ime raunala (tj. ako je rije o lokalnom
raunalu, samo .).
Drugi atribut integratedsecurity=true odreuje nain autentifikacije korisnika koji se povezuje
na SQL Server i, u naem primjeru, odreuje da se za autentifikaciju koristi Windows korisniki
raun (engl. Windows authentication mode).
Znak toka-zarez (;) unutar konekcijskog stringa koristi se za razdvajanje atributa.

3.1.2.2 Metoda Open


Nakon ispravnog postavljanja konekcijskog stringa, veza sa SQL Serverom moe se uspostaviti
pozivom metode Open. Budui da SQL Server nije integralni dio naeg programa, poziv metode
Open spada u kritine operacije. Naime, moe se dogoditi da je iz nekog razloga SQL Server
nedostupan (ili nije pokrenut ili se, ako nije na lokalnom raunalu, mogu pojaviti problemi s
mreom...) to e rezultirati izbacivanjem iznimke u naem programu. Stoga je dio kda u kojem
se aplikacija treba povezati i komunicirati s otvorenom vezom prema SQL Serveru potrebno staviti
unutar trycatch bloka.

3.1.2.3 SqlException klasa


Ako pri uspostavi veze s SQL Serverom doe do izbacivanja iznimke (ili do izbacivanja iznimke
doe zbog bilo kakve druge greke koja se dogodila izvravanjem neke naredbe na SQL Serveru),
ta e iznimka biti tipa SqlException i mogue ju je presresti i obraditi prije nego se obavi obrada
neke openite 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 moi emo ih obraditi na odgovarajui
nain. Izbaci li se iznimka nekog drugog tipa, nju e svakako uhvatiti drugi catch blok iz primjera,
u kojem je tu greku mogue razrijeiti na neki drugi nain.

Zagreb Ilica 242

Visoka

kola za primijenjeno raunarstvo

Str.22

PRISTUP PODACIMA IZ PROGRAMSKOG KODA

Sljedea slika prikazuje rezultat pokretanja programa dok je SQL Server bio stopiran. Primijetimo
da se na konzoli ispisao tekst: Dogodila se SQL greka..., to svjedoi da je uhvaena iznimka
SqlException tipa koju je obradio prvi catch blok.

Slika 3.2: Greka pri povezivanju na SQL Server

3.1.2.4 State svojstvo


Pomou State svojstva SqlConnection objekta mogue je ispitati u kojem se stanju trenutano
nalazi konekcija sa SQL Serverom. Mogue vrijednosti ovog svojstva uahurene 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
uspjenog 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 troi dosta raunalnih resursa i stoga trebamo biti paljivi s njegovim
koritenjem. im nam veza s bazom vie nije potrebna, potrebno ju je otpustiti pozivom metode
Dispose, to e na ispravan nain otpustiti sve koritene resurse. No u sluaju izbacivanja iznimke
moe se dogoditi da veza sa SQL Serverom ostane otvorena i njezini resursi zadrani. Zato smo
metodu Dispose pozvali u finally bloku naeg primjera pa e se, bez obzira na ishod pokuaja
povezivanja sa SQL Serverom (i u sluaju greke i u sluaju uspjenog povezivanja), konekcija
otpustiti.
Metoda Close koju smo koristili u primjeru zatvara konekciju s bazom, ali ne otputa odreene
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 zadrava druge resurse u pripremi za ponovno
otvaranje konekcije. Metoda Dispose prvo interno zove metodu Close, a zatim otputa sve
resurse.

tel: 01 2222 182, e-mail: info@racunarstvo.hr

www.racunarstvo.hr

Str.23

3. POGLAVLJE: RAD U POVEZANOM OKRUENJU

3.1.2.6 Povezivanje s bazom


U prethodnom smo primjeru kreirali konekciju koja se uspjeno povezivala sa SQL Serverom, ali
nismo specificirali na koju se bazu elimo povezati. To moemo uiniti postavljanjem atributa
Database. Na primjer, za povezivanje na bazu pod nazivom ADONET, koja se nalazi na instanci
SQL Servera pod nazivom sqlexpress na lokalnom raunalu, pomou Windows autentifikacije,
konekcijski string bi mogao izgledati ovako:
cn.ConnectionString=@"server=.\sqlexpress;database=ADONET;integratedsecurity=true";

3.1.2.7 SQL Server autentifikacija


Predodreeni nain autentifikacije na SQL Serveru jest Windows autentifikacija. Dakle, korisnik koji
se prijavi na Windows operativni sustav, koristi isti korisniki raun i na SQL Serveru. SQL Server
brine o tome ima li odreeni Windows korisniki raun ovlasti povezivanja na server, kao i na
svaku pojedinu bazu.
Osim Windows autentifikacije, postoji mogunost da se dodatno omogui i SQL Server
autentifikacija. Tada se unutar SQL Servera mogu definirati korisnici koji se na server posebno
prijavljuju pomou korisnikog imena i lozinke. Na primjer, ako se na lokalnu instancu sqlexpress
i bazu ADONET elimo povezati pomou SQL Server autentifikacije, s korisnikim 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 dobavljae. Na primjer, za


povezivanje na Access bazu podataka moemo 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, meutim, naglasiti da u komuniciranju s bilo kojom bazom temeljno naelo 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 moemo iskoristiti programski kd za povezivanje sa SQL serverom iz prethodnog
primjera. Jedine tri linije kda koje trebamo izmijeniti su:
1. Importirati imenski prostor System.Data.OleDb:
usingSystem.Data.OleDb;

2. Kreirati OleDbConnection objekt:


OleDbConnectioncn=newOleDbConnection();

3. Specificirati konekcijski string:


cn.ConnectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;

DataSource=Baza.mdb;PersistSecurityInfo=True";

Zagreb Ilica 242

Visoka

kola za primijenjeno raunarstvo

Str.24

PRISTUP PODACIMA IZ PROGRAMSKOG KODA

3.1.3.2 Povezivanje na Oracle


Za povezivanje na Oracle bazu moramo napraviti sljedee korake:
1. Importirati imenski prostor System.Data.OracleClient:
usingSystem.Data.OracleClient;

2. Kreirati OracleConnection objekt:


OracleConnectioncn=newOracleConnection();

3. Specificirati konekcijski string:


cn.ConnectionString=@"DataSource=(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ORASRVR)(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));
UserId=korisnickoIme;Password=lozinka;";

Na slian se nain moemo povezati s bilo kojim izvorom podataka koji podrava neki od .NET
podatkovnih dobavljaa.
Napomena: Budui da je specificiranje konekcijskog stringa zapravo jedini konkretni postupak
kojeg treba uiniti, 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, meusobno odvojeni toka-zarezima u ConnectionString svojstvu Connection
objekta. Nazivi i broj parametara ovise o podatkovnom dobavljau i vrsti baze podataka na koju se
povezujemo.
Za SQL Server bazu podataka podrani parametri konekcijskog stringa dani su u sljedeoj tablici:
Parametar

Opis

ApplicationName

Ime klijentske aplikacije ili .Net SqlClient Data Provider ako


ime aplikacije nije navedeno.

Async

Postavljeno na true, ovo svojstvo omoguuje asinkrone operacije.


Nije podrano u ADO.NET 1.x.
ili Puno ime .mdf datoteke koja se moe koristiti kao priloena
datoteka baze podataka.

AttachDBFileName
InitialFileName
ConnectionTimeout

Maksimalan broj sekundi koliko Connection objekt eka odgovor


baze o uspjenom povezivanju. Predodreena vrijednost je 15
sekundi.

CurrentLanguage

Jezik koji koristi SQL Server.

DataBase
Catalog
Encrypt

ili

InitialIme baze na koju se povezujemo.


Upuuje 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 OKRUENJU


enkripciju za razmjenu podataka izmeu klijenta i servera. Na
serveru treba biti instaliran certifikat. Predodreena vrijednost je
false.

FailoverPartner
Integrated Security
Trusted_Connection

Ime servera partnera kojem e se pristupati u sluaju neuspjenog


povezivanja s primarnim serverom. Nije podrano u ADO.NET 1.x.
ili Upuuje na to koristi li se za autentikaciju trenutani Windows
korisniki raun. Kad je ovo svojstvo postavljeno na vrijednost
false, tada moraju biti navedeni user ID i password. Specijalna
vrijednost sspi znai isto to i true. Predodreena vrijednost je
false.

MultipleActiveResultSets Kad je podeeno na vrijednost true, aplikacija moe drati vie


aktivnih skupova podataka iz baze. Ova znaajka postoji od verzije
SQL Server 2005. Nije podrana u ADO.NET 1.x.
NetworkLibrary ili Net

Odreuje mrenu biblioteku koja se koristi za uspostavu veze s


SQL Serverom. Predodreen je dbmssocn, koji se temelji na
TCP/IP.

PacketSize

Veliina paketa (u bajtovima) koji se koriste za razmjenu podataka


izmeu klijenta i SQL servera. Predodreeno je 8192.

Password ili pwd

Lozinka kojom se prijavljujemo na SQL Server.

PersistSecurityInfo

Upuuje na to treba li se ukljuiti informacija o lozinki u stringu


vraenom kao ConnectionString svojstvo. Predodreena
vrijednost je false.

Server ili DataSource

Naziv ili mrena adresa SQL Servera na koji se spajamo.

UserID ili uid

Korisniko ime kojim se prijavljujemo na SQL Server.

WorkstationID

Ime raunala koje se prijavljuje na SQL Server.

Tablica 3.4: Neki od podranih parametara konekcijskog stringa za vezu s SQL serverom

Iz prethodne tablice moemo zakljuiti da povei broj kljunih rijei potrebnih za povezivanje s
bazom podataka moe predstavljati problem, osobito ako uzmemo u obzir da su one specifine za
bazu na koju se spajamo. Stoga je u ADO.NET-u za svaki podatkovni dobavlja implementirana
klasa ConnectionStringBuilder koja preko svojih svojstava olakava generiranje konekcijskih
stringova.
Kako za povezivanje na SQL server koristimo imenski prostor System.Data.SqlClient, ime
odgovarajue klase za taj podatkovni dobavlja je SqlConnectionStringBuilder. Pomou
SqlConnectionStringBuilder objekta generiranje konekcijskog stringa za spajanje na SQL
Server bazu izgleda ovako:
SqlConnectionStringBuildercsBuilder=newSqlConnectionStringBuilder();
csBuilder.DataSource=<imeservera>;
csBuilder.InitialCatalog=<imebaze>;
csBuilder.IntegratedSecurity=true;
csBuilder.UserID=<korisnikoime>;
csBuilder.Password=<lozinka>;
...
stringconnString=csBuilder.ConnectionString;

Zagreb Ilica 242

Visoka

kola za primijenjeno raunarstvo

Str.26

PRISTUP PODACIMA IZ PROGRAMSKOG KODA

Dakle, nakon instanciranja objekta klase SqlConnectionStringBuilder, kroz postavljanje


njegovih pojedinanih svojstava najprije se odreuju potrebni parametri konekcijskog stringa.
Sastavljeni konekcijski string zatim dobivamo pozivom svojstva ConnectionString te ga moemo
dodijeliti ConnectionString svojstvu SqlConnection objekta.
Koristimo li neku drugu bazu podataka, moemo upotrijebiti ConnectionStringBuilder klasu njoj
odgovarajueg podatkovnog dobavljaa. Na primjer, za imenski prostor System.Data.OleDb
pripadajua klasa e se zvati OleDbConnectionStringBuilder, dok e za System.Data.Odbc to
biti OdbcConnectionStringBuilder.
Napomena: Koritenje ConnectionStringBuilder objekta naroito je preporuljivo (umjesto
obinog spajanja stringova) ako konekcijske parametre upisuje korisnik aplikacije,
zbog smanjenja mogunosti zlonamjernih upada u bazu.

3.1.5

Spremanje konekcijskih stringova u konfiguracijsku datoteku

Ako konekcijske stringove spremimo kao dio programskog kda, to znai da se pri svakoj migraciji
ili promjeni aplikacijske baze podataka aplikacija mora iznova prevoditi. Stoga je u .NET-u
omogueno 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 sljedei nain:
<connectionStrings>

<addname="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 sadrava ime konekcijskog stringa,
2. connectionString sadrava konekcijski string,
3. providerName sadrava ime podatkovnog dobavljaa kojeg koristimo.
3.1.5.1 Dohvaanje konekcijskih stringova iz konfiguracijske datoteke
Kad je konekcijski string spremljen u konfiguracijsku datoteku unutar <connectionStrings>
sekcije, moemo ga dohvatiti pomou klase ConfigurationManager koja se nalazi unutar
imenskog prostora System.Configuration, kako prikazuje sljedei kdni isjeak:
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

You might also like