You are on page 1of 28

ADO.NET - vod do databz v prosted .

NET

Jan Kupka

2. kvtna 2005
Obsah

1 vod do ADO.NET 3
1.1 Co je to ADO.NET? . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Pro koho je tato pruka urena? . . . . . . . . . . . . . . . . . . 3
1.3 Co budete potebovat? . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Databze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.2 MSDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.3 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.4 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.5 Microsoft Access . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.6 Ostatn databzov systmy . . . . . . . . . . . . . . . . . 5

2 Technologie ADO.NET 6
2.1 Pipojen k databzi . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Vyuit vlastnost platformy .NET . . . . . . . . . . . . . . . . . 6
2.3 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Zprostedkovatel pstupu k databzovm systmm . . . . . . 7

3 Architektura ADO.NET 8
3.1 Jmenn prostory . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2 Pehled td . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Tdy pro sprvu dat 9


4.1 DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.2 DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.2.1 Udlosti DataTable . . . . . . . . . . . . . . . . . . . . . . 10
4.3 DataColumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.3.1 Vlastnosti sloupc . . . . . . . . . . . . . . . . . . . . . . 10
4.4 DataRow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.4.1 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.5 DataRelation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.6 DataColumnMapping
a DataTableMapping . . . . . . . . . . . . . . . . . . . . . . . . . 12

5 Tdy pro pipojen k databzi 13


5.1 Pipojen k databzi
(SqlConnection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2 Provdn SQL dotaz
(SqlCommand) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.3 Datov adaptr (SqlDataAdapter) . . . . . . . . . . . . . . . . . 16
5.3.1 Aktualizace dat v databzi . . . . . . . . . . . . . . . . . 16
5.4 Tvorba pkaz
(SqlCommandBuilder) . . . . . . . . . . . . . . . . . . . . . . . . 17
5.5 Snma dat (SqlDataReader) . . . . . . . . . . . . . . . . . . . . 17

1
ADO.NET Obsah

5.6 Transakce (SqlTransaction) . . . . . . . . . . . . . . . . . . . . . 18

6 XML 19

7 Visual Studio .NET 20


7.1 Pipojen k databzi
(SqlConnection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.2 Provdn SQL dotaz
(SqlCommand) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7.3 Datov adaptr (SqlDataAdapter) . . . . . . . . . . . . . . . . . 21
7.4 DataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.5 DataView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.6 DataGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

8 Zvr 23

A vod do MSDE 24
A.1 Instalace MSDE . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
A.2 Prce s MSDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
A.3 Pprava zkladn databze aneb rychlokurz SQL . . . . . . . . . 24
A.4 Sprva MSDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

2
Kapitola 1

vod do ADO.NET

Vtm Vs pi ten pruky ADO.NET - vod do databz v prosted .NET.


Tato pruka si klade za cl vs seznmit s pstupem k databzm v prosted
.NET firmy Microsoft. Databze hraj v dnenm potaovm svt stle dle-
itj roli v profesionlnm i amatrskm vyuit. Stejn tak si sv msto pod
Sluncem sna dobt prosted .NET. Dky podpoe Microsoftu a nasazen v
budoucch operanch systmech je jeho spch jist. A pokud spojte .NET s
databzemi, dostanete ADO.NET, o kterm pojednv tato pruka.
V tto pruce se nachz mnoho ukzkovch pklad jednotlivch komponent
ADO.NET. Kompletn ukzkov pklady by vak zabraly mnoho msta a proto
jsou v tto pruce pouze podstatn sti program. Pokud by jste mli zjem
o kompletn pklady, tak je naleznete na strnce http://adonet.kvalitne.cz.
Problematika databz v prosted ADO.NET je natolik rozshl, e by kom-
pletn publikace o ADO.NET zabrala tisce strnek. Tato pruka by vm pouze
mla zjednoduit start a nasmrovat vs pro dal samostatn bdn. Dky neu-
vitelnmu tempu, jakm byla publikace napsna, se v n tm jist vyskytnou
chyby a nepesnosti. Budu tedy velmi rd, kdy mi jakkoliv vae pipomnky,
vhrady a postehy polete na moj mailovou adresu: kupka@students.zcu.cz.

1.1 Co je to ADO.NET?
Ze veho nejdve bychom si mli ci, co je vlastn ADO.NET, o kterm je cel
tato pruka napsna. ADO.NET je rozshlou knihovnou td, kter nm umo-
uj pracovat s databzemi a datovmi soubory. Jeliko se jedn o soust .NET
frameworku, poskytuje ADO.NET uivateli veker vymoenosti, kter obsahuje
samotn .NET. Jde zejmna o podporu mnoha jazyk (C# , Managed C++,
Visual Basic .NET, J# a dalch), automatick uvolovn pamti a objektov
orientovan pstup.

1.2 Pro koho je tato pruka urena?


Tato pruka je urena vem programtorm, kte maj zkuenosti s progra-
movnm v jazyce C# . Samozejmost je znalost platformy .NET. Dle je do-
poruena znalost pstupu k databzovm systmm na programtorsk rovni
v libovolnm programovacm jazyce.

1.3 Co budete potebovat?


Pro prci s ADO.NET budete samozejm potebovat .NET Framework SDK.
Sv programy mete pst v libovolnm textovm editoru a poslze interpretovat

3
ADO.NET Kapitola 1

pomoc dkovho interpretu, kter je piloen k .NET Framework SDK. Pro


komfortnj prci ovem doporuuji Microsoft Visual Studio .NET. Dle budete
potebovat databzov systm. Mete pouvat jakkoliv databzov systm
podle vaeho osobnho vkusu a podle toho, kolik penz do systmu mete
investovat. Pokud dn databzov systm nepouvte, podvejte se do plohy
A a tam naleznete popis instalace a sputn databzovho systmu MSDE. V
ploze A rovn naleznete postup vytvoen jednoduch databze pro systm
MSDE, kter je v knize pouita k pedvdn prce s tdami ADO.NET.

1.4 Databze
Pomoc rozhran ADO.NET mete pipojit k programu libovoln databzov
systm. Poadavkem je pouze to, aby systm ml vlastn OleDb ovlada. Tento
ovlada naleznete prakticky u vech databzovch systm. V nsledujcch od-
stavcch si piblme nejpouvanj databzov systmy.

1.4.1 SQL Server


SQL Server je databzov systm firmy Microsoft, co mu v ADO.NET dv
urit nskok ped ostatnmi. Je pro nj pipraveno vylepen rozhran, kter
mu umouje v nkterch ppadech dosahovat lepch vsledk ne u ostatnch
systm. Jeho nevhodou je vak vysok cena. V souasn dob je nejnovj
verz Microsoft SQL Server 2000. Produkt je k dispozici ve tech zkladnch
verzch : Enterprise, Standard, Workgroup. Dalmi verzemi Microsoft SQL Ser-
veru jsou napklad verze pro vvoje nebo pro operan systm Windows CE.
Firma Microsoft v souasnosti dokonuje novou verzi SQL serveru - Microsoft
SQL Server 2005.
Internetov strnky programu: http://www.microsoft.com/sql/.

1.4.2 MSDE
MSDE nen vlastn samostatn produkt. Je to jedna z verz programu Microsoft
SQL Serveru. Nespornou vhodou tto verze je to, e je k dispozici zdarma.
Je vhodn pro domc pouit, stejn jako pro vvoje aplikac. MSDE je
distribuovna bez administrtorskch nstroj. Na internetu se d ovem sehnat
mnoho vynikajcch administrtorskch nstroj pro tento databzov systm,
nap. MSDE Manager nebo DBA Manager 2000. Dalm omezenm je maximln
poet pti souasn sputnch proces. Kad dal proces mus pokat na
skonen nkterho bcho. Pipojen k MSDE z programu je stejn jako u SQL
Serveru, take v ppad, e u vm monosti MSDE pestanou stait, mete
bez problm pejt na placen SQL Server. Spolen s komern verz produktu
Microsoft SQL Server 2005 by mla vyjt i nekomern verze - Microsoft SQL
Server 2005 Express, kter bude nstupcem MSDE. Podle vyjden pracovnk
firmy Microsoft by mla bt tato omezen verze pro vvoje a domc uivatele
dostupn zdarma i za cenu distribunch nklad.
Internetov strnky programu: http://www.microsoft.com/sql/
/msde/.

1.4.3 Oracle
Oracle je pmm konkurentem SQL Serveru na poli databzovch systm.
Firma Oracle v souasn dob nabz svj produkt Oracle ve verzi 10. Jedn se,
stejn jako u SQL Serveru, o placen produkt. Existuje ovem i jeho nekomern
verze, kterou je mon si po zaregistrovn sthnout z webovch strnek firmy.
Internetov strnky programu: http://www.oracle.com/.

4
ADO.NET Kapitola 1

1.4.4 MySQL
MySQL je nejpopulrnj open-source databzov systm. Velkou vhodou je
hlavn jeho multiplatformn pouit, me bt nasazen na operanch systmech
Unix, Linux, Solaris, OS/2 i Windows. Protoe je tento systm zdarma, nepod-
poruje nkter funkce, kter komern systmy poskytuj.
Internetov strnky programu: http://www.mysql.com/.

1.4.5 Microsoft Access


Program, kter je soust balku Microsoft Office firmy Microsoft a d se pout
pro tvorbu jednoduchch jednouivatelskch databz. Pro jednoduch systm
i seznmen s databzemi tento program postauje, ale osobn bych doporuil
peci jen radji nkter z ve uvedench program.
Internetov strnky programu: http://office.microsoft.com/.

1.4.6 Ostatn databzov systmy


Prostednictvm rozhran ADO.NET mete pipojit k programu i dal da-
tabzov servery. Ve uveden programy vak na poli databzovch server
pedstavuj absolutn piku, a proto nebudou jin databzov systmy v tto
pruce zmnny.

5
Kapitola 2

Technologie ADO.NET

V tto kapitole se podvme na ADO.NET trochu podrobnji. Zjistme, jak


ADO.NET pracuje, a co novho pin v pstupu k databzm.

2.1 Pipojen k databzi


Doba, kdy byly databze uloeny na stejnm potai, ze kterho byly progra-
mem natny, je stejn jako ukldn databz do jednoho souboru definitivn
pry. V dnenm svt potebuje uivatel pistupovat k databzi z libovolnho
msta v internetu. Tento poadavek se samozejm musel promtnout do p-
stupu k databzm. V minulosti, kdy byla databze umstna na stejnm po-
tai jako aplikace pistupujc k n, mohl bt udrovn pstup k databz po
celou dobu bhu programu a nikomu to nevadilo. V dnen dob u tento po-
stup nen vhodn, nebo k databzi mohou pistupovat narz tisce uivatel,
co by okamit vedlo k omezen funknosti systmu. Dalm dvodem je ne-
spolehlivost sovho spojen, kter me asto padat, co by mlo za nsledek
neustl znovupipojovn k databzi. Z tchto dvod vvoji ve firm Micro-
soft napsali ADO.NET tak, aby spojen s databz bylo navzno pouze po dobu
zpracovn dotazu. Tento pstup s sebou ovem tak pin nkter problmy.
Jednm z nich je napklad udren konzistence dat v pamti a v databzovm
systmu.

2.2 Vyuit vlastnost platformy .NET


ADO.NET je soust .NET framework, co pin mnoho vhod. Uveme na-
pklad objektov orientovan programovn, automatickou sprvu pamti i
rozshl systm vyjmek. Z tohoto plyne tak pouit libovolnho jazyka obsa-
hujcho podporu platformy .NET.

2.3 XML
Jazyk XML (eXtensible Markup Language) je asto oznaovn jako revolun
technologie. Je to hlavn dky jeho otevenosti a jazykov nezvislosti. XML m
podporu u v .NET Framework, ale ADO.NET jde jet dl. Jazyk XML se stal
stejnm jazykem pro penos dat v prosted ADO.NET.

6
ADO.NET Kapitola 2

2.4 Zprostedkovatel pstupu k databzovm


systmm
Jak u jsem napsal ve, tak ADO.NET umouje pipojen k libovolnmu data-
bzovmu systmu, pro nj existuj OleDb ovladae. Nebyl by to ale Microsoft,
kdyby pro svj produkt nevytvoil nco extra. Pokud tedy pouvte databzov
systm Microsoft SQL Server (ppadn MSDE), mete pouvat speciln da-
tov typy, kter byly vytvoeny speciln pro tento databzov systm. Pro p-
stup k databzovmu systmu Microsoft SQL Server (ppadn free verzi MSDE)
je vytvoen zprostedkovatel SqlClient (jmenn prostor System.Data.SqlClient)
a pro pstup k ostatnm databzm (Oracle, MySQL, atd.) je zde zprostedko-
vatel OleDb (jmenn prostor System.Data.OleDb). Zprostedkovatel SqlClient
je kompletn napsan v zenm kdu a pi pipojen k databzi se sna vy-
uvat co nejmen poet vrstev, co by mu ve vtin ppad mlo pomoci k
dosaen vt rychlosti pstupu ne je tomu u zprostedkovatele OleDb.

7
Kapitola 3

Architektura ADO.NET

3.1 Jmenn prostory


Jmenn prostory, kter muste do svch program zahrnout (pomoc syntaxe
using), aby v program mohl pracovat s databzemi:
System.Data - jmenn prostor pro vechny obecn tdy a rozhran pro pstup
k datm v ADO.NET
System.Data.Common - tdy sdlen zprostedkovateli dat
System.Data.OleDb - tdy zprostedkovatele OleDb
System.Data.SqlClient -tdy zprostedkovatele SQL Server
System.Data.SqlTypes - datov typy aplikace SQL Server

3.2 Pehled td
Tdy v knihovn ADO.NET lze rozdlit na dv mnoiny. Prvn mnoinu tvo
tdy zamen na sprvu dat (Data Related Components). Tyto tdy jsou zcela
nezvisl na databzi a reprezentuj umstn dat z databze v pamti. Druhou
mnoinu tvo tdy zvisl na pouit databzi (Data Provider Components).
Tyto tdy umouj propojen mezi tdami pro sprvu dat a databzovmi
systmy.

8
Kapitola 4

Tdy pro sprvu dat

4.1 DataSet
DataSet je zkladnm stavebnm prvkem kad sloitj databzov aplikace.
Jde o kompletn reprezentaci sady dat, kter v sob zahrnuje tabulky, vztahy
mezi daty a omezen. S tm vm me DataSet pracovat v reimu offline (tedy
odpojen od databzovho systmu). DataSet se nestar o pipojen k databzi,
jde pouze o objekt spravujc data v pamti. DataSet me obsahovat data na-
ten nejen z databzovch systm, ale napklad i z xml soubor. K datm v
DataSetu meme pistupovat, meme je upravovat, mazat nebo porovnvat
s daty v pvodnm datovm zdroji.

Pklad vytvoen datasetu:


DataSet dataset = new DataSet();

4.2 DataTable
DataTable (datov tabulka) ukld data stejn jako to dl tabulka v databzi.
Data jsou umstna v dcch (rows) a kad poloka v dce pslu konkrt-
nmu sloupci (column). Objekt DataTable me bt pouvn samostatn, ale i
jako soust objektu DataSet. DataTable se skld z kolekce objekt Columns,
kolekce objekt Rows a kolekce objekt Constraints. Kolekce Columns ve spo-
jen s kolekc Constraints definuje takzvan schma objektu DataTable, zatmco
kolekce Rows obsahuje data.

Kolekce Columns
Kolekce Columns je instanc tdy DataColumnCollection a jde o kontejner pro
objekty typu DataColumn. Objekt DataColumn definuje sloupec datov tabulky
vetn jeho jmna, datovho typu a informace o tom, zda jde o primrn kl i
se jedn o autoinkrementan sloupec.

Kolekce Rows
Kolekce Rows je instanc tdy DataRowCollection a jde o kontejner pro ob-
jekty typu DataRow. Objekt DataRow obsahuje uloen data objektu Data-
Table podle jejich definic v kolekci DataTable.Columns. Kad dka DataRow
obsahuje jednu poloku pro kad sloupec DataColumn v kolekci Columns.

9
ADO.NET Kapitola 4

Kolekce Constraints
Kolekce Constraints je instanc tdy ConstraintCollection a jde o kontejner
pro objekty typu ForeignKeyConstraint a/nebo objekty typu UniqueConstra-
int. Objekt ForeignKeyConstraint definuje akci, kter m bt provedena na
sloupec primrnho nebo cizho kle, pokud je dek zmnn nebo smazn.
Objekt UniqueConstraint je pouvn k zajitn jedinenosti vech hodnot ve
sloupci.

Pklad runho vytvoen tabulky a jej pidn do DataSetu:


DataTable filmovaTabulka = new DataTable("Filmy");
DataSet ds = new DataSet();
ds.Tables.Add(filmovaTabulka);

4.2.1 Udlosti DataTable


Nsledujc udlosti mohou bt zachyceny a zpracovny pi prci s objektem
DataTable:

Pehled udlost objektu DataTable


RowChanging nastane pi zmn hodnoty v dce
RowChanged nastane po spn zmn dky
RowDeleting nastane pi pokusu o smazn dky
RowDeleted nastane po spnm smazn dky
ColumnChanging nastane pi zmn hodnoty ve sloupci
ColumnChanged nastane po zmn hodnoty ve sloupci

Pklad obsluhy udlosti:


//registrace udalosti
filmovaTabulka.ColumnChanging = new
DataColumnChangeEventHandler(ColumnChangingHandler);

// obsluzna metoda udalosti


private void ColumnChangingHandler(object sender,
DataColumnChangeEventArgs e)
{
// kod obsluhujici udalost
}

4.3 DataColumn
Objekt DataColumn definuje sloupec a jeho datov typ.

Pklad vytvoen dvou sloupc pro tabulku filmovaTabulka:


filmovaTabulka.Columns.Add("nazev",Type.GetType
("System.String"));
filmovaTabulka.Columns.Add("rok",Type.GetType
("System.Int32"));

4.3.1 Vlastnosti sloupc


Primary Key
Databzov tabulka m obvykle definovan sloupec (skupinu sloupc), kter je-
dinen identifikuj kadou dku v tabulce. Takovmuto identifiktoru sloupce

10
ADO.NET Kapitola 4

(skupiny sloupc) se k primrn kl.

Vytvoen primrnho kle nad jednm sloupcem tabulky:


DataColumn[] key = new DataColumn[1];
key[0] = filmovaTabulka.Columns["nazev"];
filmovaTabulka.PrimaryKey = key;

Vytvoen primrnho kle nad vce sloupci tabulky:


DataColumn[] key = new DataColumn[2];
key[0] = filmovaTabulka.Columns["nazev"];
key[1] = filmovaTabulka.Columns["rok"];
filmovaTabulka.PrimaryKey = key;

Autoinkrementace
Autoinkrementan sloupec mete nastavit pmo v databzovm systmu nebo
podle nsledujcho pkladu:
// povoleni autoinkrementace
filmovaTabulka.Columns["ID"].AutoIncrement = true;
// zacatek autoinkrementace
filmovaTabulka.Columns["ID"].AutoIncrementSeed = 10;
// krok pri autoinkrementaci
filmovaTabulka.Columns["ID"].AutoIncrementStep= 10;

Nastaven sloupce pouze pro ten


Pokud nechcete uivateli povolit zpis dat do sloupce, nastavte vlastnost Rea-
donly na hodnotu true dle nsledujcho pkladu:
filmovaTabulka.Columns["ID"].ReadOnly = true;

4.4 DataRow
Objekt DataRow obsahuje data pro jednu dku datov tabulky.

Pklad naplnn jednoho dku tabulky filmovaTabulka:


//pomocna radka
DataRow tmp;
//nastaveni schematu pomocne radky
tmp = filmovaTabulka.NewRow();
//nastaveni hodnoty pro sloupec nazev
tmp["nazev"] = "Antitrust";
//nastaveni hodnoty pro sloupec rok
tmp["rok"] = 2001;
//pridani pomocne radky do tabulky
filmovaTabulka.Rows.Add(tmp);

4.4.1 Constraints
Relan databze zajiuj integritu dat pomoc omezen (constraints). Tato ome-
zen pesn definuj, co se bude dt v ppad, e data v souvisejcm sloupci i
dce jsou mnna. V ADO.NET existuj dva druhy omezen: ForeignKeyCon-
straint a UniqueConstraint.

11
ADO.NET Kapitola 4

ForeingnKeyConstraint
Toto omezen specifikuje akce, kter maj bt provedeny, pokud je hodnota ve
sloupci i sloupcch smazna nebo upravena. Tento typ omezen je uren pro
pouit ve vztahu k primrnmu/cizmu kli. Pokud je hodnota v rodiovskm
sloupci zmnna nebo smazna, ForeignKeyConstraint definuje, co bude slou-
pec potomka v dan situaci dlat. Akce k proveden jsou definovny ve vlastnos-
tech ForeignKeyConstraint.DeleteRule nebo ForeignKeyConstraint.UpdateRule
a mohou b nastaveny na tyto hodnoty:
Rule.Cascade - smae nebo uprav dky ve vztahu (implicitn akce)
Rule.SetNull - nastav hodnoty ve vztanch dkch na DBNull

Rule.SetDefault - nastav hodnoty ve vztanch dcch na hodnotu vlast-


nosti DefaultValue
Rule.None - na vztan dky nebudou provedeny dn akce

UniqueConstraint
Toto omezen zajiuje uniktn hodnoty v celm sloupci. Pokud se pokusme
zadat stejnou hodnotu do dvou dk sloupce s omezenm UniqueConstraint,
bude vyvolna vyjmka.

4.5 DataRelation
Objekt DataRelation umouje vytvoit vztah mezi dvma objekty typu Data-
Table pomoc jejich dvou sloupc. Jedn se prakticky o programov vytvoen
vztahu primrn kl - ciz kl.

Pklad vytvoen relace mezi sloupci dvou tabulek:


DataColumn parentColumn;
DataColumn childColumn;

// inicializace sloupcu
parentColumn = DataSet.Tables["Customers"].
Columns["CustID"];
childColumn=DataSet.Table["Orders"].
Columns["CustID"];

// vytvoreni relace
DataRelation relationCustomersOrders = new
DataRelation ("CustomersOrders", parentColumn,
childColumn);

// pridani relace
Dataset.Relations.Add(relationCustomersOrders);

4.6 DataColumnMapping
a DataTableMapping
Tyto objekty umouj namapovat sloupcm tabulky nov jmna pro jednodu
pouit v databzovch aplikacch.

12
Kapitola 5

Tdy pro pipojen k


databzi

5.1 Pipojen k databzi


(SqlConnection)
Abychom mohli pracovat s databzovm systmem, musme s nm nejdve na-
vzat spojen. Po pipojen k databzovmu serveru meme penet data mezi
databz a na aplikac. Po ukonen penosu dat musme spojen s databzo-
vm serverem zase ukonit.
Pro pipojen k databzi potebujeme vytvoit tzv. pipojovac etzec, kter
obsahuje zkladn data o pipojen.

Zkladn parametry pipojovacho etzce


server nzev databzovho serveru
uid (UserID) jmno uivatele
pwd (Password) heslo uivatele
database nzev databze
1
Pklad pipojen k databzovmu serveru:
// etzec pro pipojen k databzovmu serveru
string connString = "server=(local);uid=sa;
pwd=heslo;database=Test;";

// vytvoen objektu typu SqlConnection


SqlConnection conn = new SqlConnection(connString);

//oteven pipojen
conn.Open();

// tady bude njak prce s databzovm serverem

//uzaven spojen
conn.Close();
Druh pklad ukazuje, jak se meme pipojit k databzovmu serveru pomoc
syntaxe using. Pi ukonen bloku uzavenho pkazem using bude uzaveno
spojen s databz a zruen objekt SqlConnection. Z tohoto dvodu nemusme
pout metodu Close().
1 nezapomete pipojit k programu jmenn prostor System.Data.SqlClient

13
ADO.NET Kapitola 5

// etzec pro pipojen k databzovmu serveru


string connString = "server=(local);uid=sa;
pwd=heslo; database=Test;";

using (SqlConnection conn = new SqlConnection


(connString))
{
//oteven pipojen
conn.Open();

// tady bude njak prce s databzovm serverem


}
Pedchzejc pklad pipojen k databzovmu serveru je upednostovan.
Existuj i dal strategie pipojovn k databzovmu serveru (napklad pomoc
bloku try/catch/finally), ale tmi se ji nebudu v tto pruce zabvat.

Poznmka 1: Chtl bych upozornit, e veker vae komunikace s databzo-


vm systmem by mla bt uzavrna do try/catch/
/finally blok. S ohledem na nzornost pklad v tto pruce vak blok
try/catch/finally na nsledujcch strnkch neuvidte.

Poznmka 2: Ve vech nsledujcch pkladech u budu pedpokldat spn


pipojen a odpojen databze a budu se soustedit na vysvtlovn konkrtnch
problm.

5.2 Provdn SQL dotaz


(SqlCommand)
Objekt SqlCommand je pouvn pro spoutn dotaz na datovm zdroji. Ro-
zeznvme ti druhy dotaz:
CommandType.Text - pouv se pro textov zadn sql dotazu (implicitn
nastaven)
CommandType.TableDirect - pouv se pro zskn vech sloupc tabulky,
jej jmno zadme jako parametr
CommandType.StoredProcedure - pouv se pro voln uloench pro-
cedur
Pkazy mohou bt spoutny tymi rznmi zpsoby : ExecuteNonQuery(),
ExecuteReader(), ExecuteScalar() a ExecuteXml Reader(). Podrobnji se pod-
vme na prvn ti metody.

Metoda ExecuteNonQuery()
- provede pkaz a nevrac dn vsledky
- pouv se pro spoutn editanch, vkldacch a odstraovacch dotaz
- vrac jedinou hodnotu, kterou je poet ovlivnnch zznam

Pklad:
// SQL dotaz
string strCommand = "CREATE TABLE Filmy
(nazev varchar, rok int)";

14
ADO.NET Kapitola 5

// vytvoen objektu SqlCommand


SqlCommand command = new SqlCommand(strCommand,
conn);

// proveden dotazu
command.ExecuteNonQuery();

// nastavme nov SQL dotaz


command.CommandText = "INSERT INTO Filmy values
(X-Files,1998)";

// pkaz vrac poet ovlivnnch dk


int pocet = command.ExecuteNonQuery();

Console.WriteLine("Pocet ovlivnenych radek: {0}",


pocet);

Poznmka: Mnohem zajmavj je vracen potu ovlivnnch zznam nap-


klad pi pkazu UPDATE, v tomto ppad jde pouze o demonstran pklad.

Metoda ExecuteReader()
- provede pkaz a vrt objekt, kter implementuje rozhran IDataReader
- vrcen objekt meme prochzet pomoc snmae dat (DataReader), kter
si podrobn popeme pozdji

Pklad:
string strCommand = "SELECT nazev, rok FROM Filmy";
SqlCommand command = new SqlCommand(strCommand,
conn);
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
Console.WriteLine("{0} - {1}",reader[0], reader[1]);
}

Metoda ExecuteScalar()
- provede pkaz a vrt jednu hodnotu
- pouv se napklad pro uren potu zznam v tabulce

Pklad:

string strCommand = "SELECT COUNT(*) FROM Filmy";


SqlCommand command = new SqlCommand(strCommand,
conn);

// vrt poet zznam v tabulce Filmy


int cislo = (int) command.ExecuteScalar();
Console.WriteLine(cislo.ToString());

15
ADO.NET Kapitola 5

Uloen procedury
Voln procedur provdme takt pomoc objektu SqlCommand. Nejdve mu-
sme vytvoit proceduru v na databzi. Zde je jednoduch pklad uloen
procedury pro SQL server:
CREATE PROCEDURE InsertFilm(@nazev varchar(50),
@rok INTEGER) AS INSERT INTO Filmy VALUES
(@nazev, @rok);
Pklad pouit uloen procedury:
// nastaveni objektu SqlCommand
SqlCommand command = new SqlCommand("InsertFilm");
command.Connection = conn;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter ("@nazev",
SqlDbType.VarChar));
command.Parameters.Add(new SqlParameter ("@rok",
SqlDbType.Int));

//spusteni ulozene procedury s parametry


command.Parameters[0].Value="Dune";
command.Parameters[1].Value=1984;
command.ExecuteNonQuery();
Poznmka: Tato procedura sice nem hlub smysl, nebo stejnou funkci spln
jednoduch SQL dotaz, ale pro ukzku posta.

5.3 Datov adaptr (SqlDataAdapter)


U vme, jak se pipojit k databzi. Tak vme, e data jsou uloena v objektu
DataSet. Jak ale data penst z databze do objektu DataSet? K tomuto elu
slou objekt DataAdapter. DataAdapter tvo imaginrn most mezi daty v pa-
mti (DataSet) a mezi daty v databzovm systmu.

Pklad naten dat do objektu DataSet:


DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter


("SELECT * FROM Filmy;", conn);

//naplnn datasetu
da.Fill(ds,"Filmy");

//vpis nzvu sloupc v tabulce Filmy v datasetu


foreach (DataColumn sloupec in ds.Tables["Filmy"].
Columns)
{
Console.WriteLine(sloupec.Caption.ToString());
}

5.3.1 Aktualizace dat v databzi


Pokud zavolme metodu Fill datovho adaptru (DataAdapter), tak jsou data v
objektu DataSet obnovena novmi daty z databze. Co ale budeme dlat v p-
pad, e byla zmnna data v DataSetu a chceme je nahrt zpt do databze?
V takovm ppad mme dv monosti.

16
ADO.NET Kapitola 5

Prvn monost je zachytvn stav DataSetu a vytvoen vlastnch SQL dotaz


jako reakce na zmnu jeho stavu. Kad dek v DataSetu m vlastn hodnotu
RowState, kter je pi naten dat z databze nastavena na Unchanged (ne-
zmnn). Pokud do DataSetu pidme nov dek, je jeho vlastnost RowState
nastavena na Added (pidn). Smazanmu dku 2 je nastavena hodnota De-
leted (smazn). Upravenmu dku je nastavena hodnota Modified (zmnn).
Aktualizace SQL dotazy je asto nahrazovna uloenmi procedurami.
Druhou monost, jak postupovat v ppad, e chceme zmnn data v Data-
Setu penst do databzovho systmu je pouit objektu SqlCommandBuilder,
o kterm si povme v nsledujc kapitole.

5.4 Tvorba pkaz


(SqlCommandBuilder)
SqlCommandBuilder je objekt, kter nm usnaduje prci pi penosu zmn-
nch dat z objektu DataSet zptky do databzovho systmu. SqlCommandBu-
ilder provede analzu pkazu SELECT v datovm adaptru a nsledn pomoc
nj vygeneruje SQL dotazy INSERT, UPDATE a DELETE.
Pro pouit objektu SqlCommandBuilder musme splnit nsledujc podmnky:
1. Datov adaptr mus mt definovn pkaz SELECT. Ten meme na-
stavit bu v konstruktoru objektu DataAdapter nebo pomoc vlastnosti
SelectCommand datovho adaptru.
2. V pkazu SELECT mus bt zadn sloupec primrnho kle nebo sloupec
s omezenm unique.
Pklad pouit objektu SqlCommandBuilder pro aktualizaci dat v databzi:
DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter


("SELECT * FROM Filmy;", conn);

// SqlCommandBuilder pipojen na datov adaptr


SqlCommandBuilder cb = new SqlCommandBuilder(da);

//naplnn datasetu
da.Fill(ds,"Filmy");

//pidn novho zznamu do datasetu


DataRow myRow;
myRow = ds.Tables["Filmy"].NewRow();
myRow[0] = "XXX";
myRow[1] = 2000;
ds.Tables["Filmy"].Rows.Add(myRow);

// update dat v databzi


da.Update(ds, "Filmy");

5.5 Snma dat (SqlDataReader)


Objekt SqlDataReader reprezentuje nejjednodu pstup k datm v databzi.
Jeho jednoduchost je vak vykoupena nkolika nevhodami. DataReader me
2 dek nen fyzicky vymazn, jen je mu nastaven pznak a nen zobrazovn

17
ADO.NET Kapitola 5

pracovat pouze s pipojenou databz, tzn. e je potebn kvalitn pipojen k


databzi. DataReader me v jednom okamiku pracovat pouze s jednou dkou
v databzi. K vhodm naopak pat, e DataReader ke sv innosti nevyaduje
DataSet, data mohou bt napklad vypisovna na monitor nebo zpracovvna
jinm zpsobem. DataReader si meme pedstavit jako jednosmrn datab-
zov kurzor.

Pklad pouit objektu DataReader:


// pkaz pro DataReader
SqlCommand command = new SqlCommand
("SELECT * FROM Filmy",conn);

//sputn pkazu
SqlDataReader reader = command.ExecuteReader();

//natn a vpis dat


while (reader.Read())
{
Console.WriteLine("{0} - {1}",
reader.GetValue(0), reader.GetValue(1));
}

//ukonen ten
reader.Close();

5.6 Transakce (SqlTransaction)


Transakce jsou pouvny v ppad, e chceme spustit vce pkaz najednou,
kter maj bt provedeny jako jedna nedliteln transakce.

Pklad proveden t pkaz najednou:


// zatek transakce
SqlTransaction trans = conn.BeginTransaction();

// nastaven objektu SqlCommand


SqlCommand command = conn.CreateCommand();
command.Connection=conn;
command.Transaction=trans;

command.CommandText = "INSERT INTO Filmy VALUES


(American Pie,1999)";

command.CommandText = "INSERT INTO Filmy VALUES


(American Pie 2,2001)";
command.ExecuteNonQuery();

command.CommandText = "INSERT INTO Filmy VALUES


(American Pie 3,2004)";
command.ExecuteNonQuery();

// potvrzen transakce
trans.Commit();

18
Kapitola 6

XML

Jak u jsem napsal dve, XML je vyuvno v ADO.NET pi vtin inter-


nch operac. V tto kapitole si ukeme pouze zkladn operace, ktermi je
naten dat ze souboru typu XML do objektu DataSet a uloen objektu Da-
taSet do XML souboru. XML poskytuje mnoho dalch zajmavch zleitost,
nap. pomoc schmat dokumentu XML (XSD) vm me program automa-
ticky vygenerovat zdrojov kd ve vaem programovacm jazyce, kter vytvo
tabulky dle schmatu. Bohuel toto tma ji pesahuje rmec tto pruky.

Uloen databze do souboru XML


Pokud mme v pamti vytvoen objekt DataSet, meme ho jednodue uloit
do XML souboru. Bu meme do XML souboru uloit pouze data, nebo me
bt v souboru jet uvedeno schma DataSetu.
Uloen bez schmatu provedeme pkazem (ds je instance objektu DataSet):
ds.WriteXml("data.xml");
Uloen vetn schmatu provedeme pkazem:
ds.WriteXml("data2.xml", XmlWriteMode.WriteSchema);

Vytvoen databze ze souboru XML


Naten dat do DataSetu z XML souboru je velice jednoduch. Sta napsat
nsledujc dky:
DataSet ds = new DataSet();
ds.ReadXml("data.xml");
Je pln jedno, zda XML soubor obsahuje schma i nikoliv. V ppad, e
jsou v souboru pouze data, tak si strukturu objekt DataSet vytvo sm podle
uspodn tchto dat.

19
Kapitola 7

Visual Studio .NET

V tto kapitole se podvme na to, jak nm ulehuje pstup k databzm pro-


gramovac prosted Visual Studio .NET. Po sputn aplikace Visual Studio
a vytvoen novho projektu typu Windows Application naleznete po prav
stran pracovn plochy litu ToolBox. Na n se nachz paleta Data, kter ob-
sahuje komponenty pro prci s databzemi. Jsou to komponenty pro sprvu
dat (DataSet a DataView) a komponenty pro pstup k databzm (Connection,
Command a DataAdapter). Komponenty pro pstup k databzm existuj v
nkolika verzch - s pedponou Sql (pro SQL Server a MSDE), OleDb (pro da-
tabzov systmy pipojen pomoc ovladae OleDb), Odbc (pro databzov
systmy pipojen pomoc ovladae Odbc, co je pedchdce ovladae OleDb) a
Oracle (speciln ovlada pro databzov systm Oracle). V dalm textu budu
opt pracovat s databzovm systmem MSDE, a proto budou nzvy objekt
zanat pedponou Sql.

7.1 Pipojen k databzi


(SqlConnection)
Pipojen k databzi provedeme pomoc nsledujcho postupu. Nejdve si vy-
tvome pipojen na n databzov server. Nad litou ToolBox se nachz lita
oznaen jako Server Explorer. Po jejm oteven vybereme poloku Data Con-
nections a klikneme na n pravm tlatkem. Vzpt vybereme poloku Add
Connection. . .. Oteve se formul, ve kterm postupn nastavme pipojen ke
zvolen databzi. Jako nzev serveru meme napsat (local), co znamen, e
se pipojujeme k databzi bc na tomto potai, nebo adresu serveru s data-
bz. Vyplnme kolonky Uivatelsk jmno a Heslo a zaktneme polko Povolit
uloen hesla, abychom nemuseli tyto daje zadvat pi bhu programu. Nyn si
meme vybrat pomoc rozbalovacho menu databzi, ke kter se chceme pipo-
jit. Ppadn si meme spojen jet otestovat kliknutm na tlatko Testovat
pipojen. Po potvrzen voleb se nm pod poloku Data Connections pidalo
prvn pipojen na databzi. Takovchto pipojen si meme vytvoit libovoln
mnostv. Nespornou vhodou tohoto postupu je fakt, e Visual Studio m
jednotliv pipojen trvale uloena, take je mete pout i pro vvoj dalch
aplikac.
Pokud je pipojen nastaveno, meme pipojit databzi k na aplikaci. Pro
pipojen se pouv komponenta SqlConnection.

20
ADO.NET Kapitola 7

Dleit vlastnosti komponenty SqlConnection


Name nzev komponenty
ConnectionString pipojovac etzec mete bu vybrat
z menu, pokud jste si vytvoili pipojen
popsan v pedchzejcm odstavci,
nebo zadat run
Database vrac nzev databze
DataSource vrac nzev instance SQL serveru
ServerVersion vrac verzi instance SQL serveru,
ke ktermu jste pipojeni
WorkstationId vrac nzev klientsk stanice

Dleit metody komponenty SqlConnection


Open() oteven spojen s databz
Close() uzaven spojen s databz

7.2 Provdn SQL dotaz


(SqlCommand)
Pro tvorbu SQL dotazu slou ve Visual Studiu komponenta SqlCommand.

Nejdleitj vlastnosti komponenty SqlCommand


Name nzev komponenty
CommandText SQL dotaz
CommandType nastaven typu dotazu (Text,
StoredProcedure, TableDirect)
Connection pipojen k databzi (instance objektu
SqlConnection)

Nejdleitj metody komponenty SqlCommand


ExecuteNonQuery() proveden pkazu bez vrcen vsledku
ExecuteScalar() proveden pkazu s nvratem jedn
hodnoty
ExecuteReader() proveden pkazu s nvratem objektu
implementujcho rozhran IDataReader

7.3 Datov adaptr (SqlDataAdapter)


Po pidn komponenty SqlDataAdapter na plochu formule se spust prvodce,
kter nm pome s nastavenm tto komponenty. Po odklepnut vodnho in-
formanho okna pejdeme na dal, ve kterm vybereme pipojen (SqlCon-
nection), kter ji mme vytvoeno, ppadn vytvome nov. Na dal obra-
zovce musme nastavit zpsob aktualizace dat v databzi (pomoc SQL dotaz,
vytvoenm novch uloench procedur i pouitm ji existujcch procedur).
Pro jednoduchost zvolme aktualizaci pomoc SQL dotaz (Use Sql Statements).
Na dal obrazovce meme pomoc aplikace Query Builder vytvoit SQL dotaz
(typu SELECT) i ho zapsat run. Posledn obrazovka u jen informuje, zda
se ve povedlo nebo ne.

Ukzka kdu (naplnn objektu typu DataSetu pomoc objektu typu DataA-
dapter):
sqlDataAdapter1.Fill(dataSet1);

21
ADO.NET Kapitola 7

7.4 DataSet
DataSet opt nalezneme na palet Data lity ToolBox.

Nejdleitj vlastnosti komponenty DataSet


Name nzev komponenty
DataSetName pojmenovn instance DataSetu
Relations kolekce relac mezi tabulkami
Tables kolekce tabulek

Nejdleitj metody komponenty DataSet


AcceptChanges proveden zmn
RejectChanges odmtnut zmn
ReadXml(string filename) naten dat z XML do DataSetu
WriteXml(string filename) uloen dat z DataSetu do XML

7.5 DataView
Komponentu DataView najdeme stejn jako pedchzejc komponenty na palet
Data. Tato komponenta nm umouje vybrat data z DataSetu podle rznch
filtrovacch dotaz.

Nejdleitj vlastnosti komponenty DataView


Name nzev komponenty
Table specifikuje tabulku, nad kterou vytvome
pohled
AllowDelete specifikuje monost mazat data
AllowEdit specifikuje monost upravovat data
AllowNew specifikuje monost vytvet data
RowFilter filtr dek
(nap.: rok=1998)
RowStateFilter filtr stavu dek
(Unchanged, New, Deleted)

Nejdleitj metody komponenty DataView


AddNew() pidn nov dky
Delete(int index) smazn dky na zadanm indexu

7.6 DataGrid
DataGrid je jedin vizuln komponenta, kterou si v tto pruce pedstavme.
Komponentu nenalezneme na palet Data, nbr na palet Windows Forms. Jde
o datovou tabulku, kter reprezentuje data vizuln stejnm zpsobem jako jsou
data uloena v databzi. DataGrid me zobrazovat data uloen v komponen-
tch DataSet nebo DataView.

Nejdleitj vlastnosti komponenty DataGrid


Name nzev komponenty
AllowSorting umon azen dat kliknutm na nzev
sloupce, dle kterho chceme adit
DataMember zobrazen pouze vybran tabulky DataSetu
DataSource zdroj dat (DataSet nebo DataView)
ReadOnly nastaven komponenty pouze pro ten

22
Kapitola 8

Zvr

ADO.NET je pravdpodobn nejefektivnj zpsob pstupu k databzovm


systmm souasnosti. Pokud tedy umte nkter z programovacch jazyk pod-
porovanch platformou .NET, nemete zvolit lpe. Pehled zkladn prce s da-
tabzovmi systmy jsem se pokusil piblit v tto pruce.

23
Ploha A

vod do MSDE

A.1 Instalace MSDE


1. Databzov systm MSDE si mete sthnout zcela zdarma z nsledujc
adresy: http://www.microsoft.com/sql/msde/
downloads/download.asp.
2. Soubor MSDE2000A.exe je samorozbalovac archv, kter si rozbalte do
libovolnho adrese.
3. Nyn muste spustit soubor setup.exe s parametry, kter definuj zpsob
instalace. Pokud se vm nechce protat npovdu, spuste soubor n-
sledujcm pkazem (pro zkladn pouit zcela postauje): setup.exe SA-
PWD=heslo SECURITYMODE=SQL.
4. Nsleduje tich instalace programu.
5. Po skonen instalace a ppadnm restartu systmu ji mete pistupovat
k databzovmu serveru jako uivatel sa s heslem, kter jste zadali ve
tetm kroku. Bh MSDE indikuje ikonka databze se zelenou ipkou v
trayi.

A.2 Prce s MSDE


Systmu MSDE mete zadvat SQL dotazy pomoc konzolov aplikace. Tuto
aplikaci najdete pi standardn instalaci v adresi C:\Program Files\Microsoft
SQL Server\80\Tools\Binn. Program m nzev OSQL.exe a nejjednodueji ho
spustte pkazem OSQL.exe -U username -P password, kde username je vae
uivatelsk jmno a password je vae heslo.

A.3 Pprava zkladn databze aneb rychlokurz


SQL
Po sputn konzolov aplikace si nejdve vytvome novou databzi. Zadme
pkaz create database Test a stiskneme klvesu Enter. 1 Program nm vy-
pe daje o vytvoen databze a jejho log souboru. Nyn se do databze pe-
pneme pomoc pkazu use Test. Vytvome jednoduchou tabulku pomoc SQL
dotazu CREATE TABLE Filmy(nazev varchar(50) PRIMARY KEY, rok int);.
1 Pipomnm, e MSDE je free verz MS SQL Serveru, take musme po kadm SQL

dotazu zapsat jet pkaz go a stisknout klvesu Enter.

24
ADO.NET Ploha A

Pro tento pklad budeme pedpokldat, e kad film m uniktn nzev. Do ta-
bulky vlome jeden zznam nsledujcm SQL dotazem: INSERT INTO Filmy
VALUES(X-Files, 1998);. Dotazem SELECT * FROM Filmy; se pesvdme,
e je nae testovac tabulka s daty vytvoena.

A.4 Sprva MSDE


Ke spravovn a konfiguraci databzovho systmu MSDE mete vyut rzn
programy, nap. DbaMgR2k nebo MSDE Manager for .NET.

25
Literatura

[1] Simon Robinson, K. Scott Allen, Ollie Cornes, Jay Glenn, Zach Greenvoss,
Burton Harvey, Christian Nagel, Morgan Skinner, Karli Watson, 2003. C#
Programujeme profesionln, Wrox, Computer Press.
[2] Dalibor Kam, 2001. Programujeme .NET aplikace ve Visual Studiu .NET,
Computer Press.
[3] Luboslav Lacko, 2003. SQL Hotov een, Computer Press.

26

You might also like