Professional Documents
Culture Documents
Pristup Podacima Iz Programskog Koda
Pristup Podacima Iz Programskog Koda
Dijana Stilinovi
grafiki urednik:
Zagreb, 2010
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
;
;
;
;
;
Str.18
3.1
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
www.racunarstvo.hr
Str.19
Naziv
Opis
ConnectionString
DataSource
ServerVersion
State
Naziv
Opis
BeginTransaction
ChangeDatabase
Close
CreateCommand
GetSchema
New
OnStateChange
Open
Naziv
Opis
StateChange
InfoMessage
Visoka
Str.20
3.1.2
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();
www.racunarstvo.hr
Str.21
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.
Visoka
Str.22
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.
www.racunarstvo.hr
Str.23
3.1.3
DataSource=Baza.mdb;PersistSecurityInfo=True";
Visoka
Str.24
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
Async
AttachDBFileName
InitialFileName
ConnectionTimeout
CurrentLanguage
DataBase
Catalog
Encrypt
ili
www.racunarstvo.hr
Str.25
FailoverPartner
Integrated Security
Trusted_Connection
PacketSize
PersistSecurityInfo
WorkstationID
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;
Visoka
Str.26
3.1.5
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.
www.racunarstvo.hr