Editorial - Vitajte na stránkach www.einsty.hostujem.sk
Editorial - Vitajte na stránkach www.einsty.hostujem.sk
Editorial - Vitajte na stránkach www.einsty.hostujem.sk
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
P R O G R A M U J E M E uchováva pôvodný aj aktuálny stav údajov, umoòuje dy<strong>na</strong>mickú modifikáciu údajov a metadát (údaje o údajoch), umoòuje <strong>na</strong>tívnu prácu s XML vrátane serializácie.Schematicky by sme DataSet mohli zjednodušene vyjadri takto (preklada to do slo−venèiny je zbytoèné, pretoe takto sa predmetné objekty pouívajú pri programovaní –obr. 2).Komplexne môeme <strong>na</strong>z<strong>na</strong>èi prácu s DataSetom pomocou <strong>na</strong>sledujúceho fragmentukódu:string sConnString = "Persist Security Info=False;" +"User ID=sa;Initial Catalog=Northwind;" +"Data Source=MYSERVER";SqlConnection conn = new SqlConnection(sConnString);conn.Open();string sQueryString = "SELECT CompanyName FROM Customers";SqlDataAdapter myDSAdapter = new SqlDataAdapter();DataSet myDataSet = new DataSet();myDSAdapter.SelectCommand = new SqlCommand(sQueryString, conn);myDSAdapter.Fill(myDataSet);conn.Close();DataSet sa <strong>sk</strong>ladá z dvoch objektov.DataTableCollection – tento objekt zapuzdruje objekty typu DataTable.DataTable – aj tento objekt môeme rozmeni „<strong>na</strong> drobné“, v <strong>na</strong>šom prípade <strong>na</strong> ob−jekty Columns, Rows a Constraints. Ukáeme si <strong>na</strong>j<strong>sk</strong>ôr kód <strong>na</strong> uloenie výsledkov dopy−tu cez DataAdapterDim strConn, strSQL As StringDim da As New OleDbDataAdapter(strSQL, strConn)Dim tbl As New DataTable()da.Fill(tbl)a takisto kód <strong>na</strong> <strong>na</strong>plnenie údajovDim strConn, strSQL As StringDim da As New OleDbDataAdapter(strSQL, strConn)Dim tbl As New DataTable()tbl.Columns.Add("CustomerID", GetType(String))tbl.Columns.Add("CompanyName", GetType(String))…da.Fill(tbl)Ak chceme vypísa jednotlivé záz<strong>na</strong>my, pouijeme kód typu:Dim row As DataRowFor Each row In tbl.RowsConsole.WriteLine(row("CustomerID") + " − " + row("CompanyName"))Next rowDataRelation umoòuje definova relaèné vzahy medzi objektmi v databáze. Reláciemedzi tabu¾kami opisujú vzahy medzi objektmi reálneho sveta, ktoré tieto tabu¾ky pred−stavujú. Pri návrhu databázových tabuliek, <strong>na</strong> ktoré <strong>na</strong>dväzuje aplikaèná logika, môemeObr. 3definova nieko¾ko druhov vzahov. Vzh¾adom <strong>na</strong> kardi<strong>na</strong>litu budeme entity <strong>na</strong>zýva prváa druhá. Medzi nimi bude vzah (relácia) 1 : 1 – prvej entite, <strong>na</strong>príklad záz<strong>na</strong>mu v databázovej tabu¾ke, zodpovedá maximálnejed<strong>na</strong> druhá entita, teda záz<strong>na</strong>m z inej databázovej tabu¾ky 1 : N – prvej entite zodpovedá viac druhých entít. Ale <strong>na</strong>opak, druhej entite zodpove−dá maximálne jed<strong>na</strong> prvá entita. M : N – prvej entite zodpovedá viac druhých entít. A takisto aj <strong>na</strong>opak, druhej entitezodpovedá viac prvých entít.Ale to sme si od<strong>sk</strong>oèili do teórie návrhu databáz. Ukáeme si radšej praktický príklad<strong>na</strong> <strong>na</strong>plnenie DataSetu údajmi, definovanie relácie medzi údajmi a prístup k takto relaè−ne zviazaným údajom.Dim daCustomers As New SqlDataAdapter(strSQLCustomers, strConnSQLServer)Dim daOrders As New OracleDataAdapter(strSQLOrders, strConnOracle)Dim ds As New DataSet()daCustomers.Fill(ds, "Customers")daOrders.Fill(ds, "Orders")ds.Relations.Add("CustomersOrders", ds.Tables("Customers").Columns("CustomerID"), _ds.Tables("Orders").Columns("CustomerID"))Dim rowCustomer, rowOrder As DataRowFor Each rowCustomer In ds.Tables("Customers").RowsConsole.WriteLine(rowCustomer("CompanyName"))For Each rowOrder In rowCustomer.GetChildRows("CustomersOrders")Console.WriteLine(vbTab & rowOrder("OrderID") & " − " & rowOrder("OrderDate"))Next rowOrderNext rowCustomerConstraint (integritné obmedzenia). Aby sme zabránili zadávaniu nesprávnych hodnôtdo databázových tabuliek, je niekedy potrebné zavies pre niektoré ståpce urèité obme−dzenia. Bolo by nezmyslom stanovi niektorý ståpec ako primárny k¾úè, <strong>na</strong>príklad rodnéèíslo, keby polovica záz<strong>na</strong>mov mala v tomto ståpci hodnotu NULL a podobne. Obmedze−nia sa môu vzahova ku konkrétnemu ståpcu alebo k celej tabu¾ke. Najèastejšie sa po−uívajú obmedzenia NOT NULL, PRIMARY KEY, UNIQUE, FOREIGN KEY a CHECK.Na záver <strong>na</strong>miesto zoz<strong>na</strong>mu odporúèanej literatúry bude jednoduchšie pozrie si tentoobrázok kníh z vydavate¾stva Microsoft Press (obr. 3). Niektoré z nich sú u vyšli v èeštine.Nabudúce sa budeme podrobnejšie venova objektu DataGrid <strong>na</strong> zobrazenie údajov <strong>na</strong>stránke HTML.¼uboslav LackoZoz<strong>na</strong>m odporúèanej literatúryProgramujeme v jazyku C#4. èasV tejto èasti seriálu o programovaní v C# sa budeme venova <strong>na</strong>ïalej princípom objekto−vého programovania. Konkrétne pôjde o vlastnosti (properties) a následne sa budemevenova konštruktorom a deštruktorom. Zaèneme však vytváraním inštancií a vysvetlenímsi istej terminológie, resp. rozdielov medzi pojmami, ktoré budeme v tomto seriáli po−uíva.TERMINOLÓGIA. V tejto krátkej podkapitole chcem objasni pojmy trieda, objekt, in−štancia a tvorba inštancií. Pokia¾ sú vám tieto termíny dôverne známe, môete <strong>na</strong>sledujú−ci text s pokojne pre<strong>sk</strong>oèi. Pokia¾ nie, èítajte ïalej.Trieda je základným pojmom OOP. Predstavuje šablónu objektov. Trieda definuje, akobudú vyzera z nej vytvárané inštancie, aké budú ma dátové zloky a metódy. V momen−te, keï z triedy vytvoríte inštanciu (ktorá je v terminológii OOP povaovaná viacerými ja−zykmi za synonymum objektu, èo síce nemusí plati vdy, ale väèšinou sa to tak chápe),môete vyuíva jej metódy, teda presnejšie rozhranie, <strong>na</strong> to, èo potrebujete, resp. <strong>na</strong> to,<strong>na</strong> èo bola trieda <strong>na</strong>vrhnutá. Vytvorenie novej inštancie sa u<strong>sk</strong>utoèòuje v C# pomocouk¾úèového slova new. Za ním uvediete názov triedy a v zátvorkách parametre, pokia¾ mátrieda parametrický konštruktor (o konštruktoroch sa doèítate ïalej). Take ak chcemevytvori inštanciu <strong>na</strong>šej triedy Auto s názvom mojeAuto, spravíme to takto:Auto mojeAuto = new Auto();Tu sme deklarovali premennú mojeAuto typu Auto a priradili sme jej novovytvorenú in−štanciu triedy Auto. Teraz môete pristupova k jej verejným zlokám pomocou operáto−ra . (bodka). Ak teda chceme zavola metódu <strong>na</strong>stavRychlost() a pomocou nej <strong>na</strong>stavihodnotu dátovej zloky rychlost <strong>na</strong> 50, staèí <strong>na</strong>písa:mojeAuto.<strong>na</strong>stavRychlost(50);Poznámka pre programátorov C++: v C# sú všetky objekty dy<strong>na</strong>mické, èo z<strong>na</strong>mená,e <strong>na</strong> vytváranie inštancií musíte pouíva operátor new. Keby ste <strong>na</strong>písali nieèo akoAuto mojeAuto;nemali by ste k dispozícii statický objekt typu Auto ako v C++, ale iba deklarovanú pre−mennú typu Auto. To z<strong>na</strong>mená, e iadny objekt v <strong>sk</strong>utoènosti nebol vytvorený a nebolamu vyhradená iad<strong>na</strong> pamä. Preto nebude moný prístup k jednotlivým èlen<strong>sk</strong>ýmzlokám triedy Auto.VLASTNOSTI. Vlastnosti (z angl. properties) slúia <strong>na</strong> zjednodušenie pristupovaniak súkromným dátovým zlokám objektu. V predošlej èasti sme si ukázali, ako je moné ktýmto zlokám pristupova pomocou prístupových metód. Toto riešenie, ako ste samivideli, môe by v niektorých prípadoch zbytoène akopádne, a práve preto máme k dis−pozícii vlastnosti. Kadá vlastnos sa vzahuje k nejakej súkromnej (prípadne chránenej)dátovej zloke (samozrejme, nemusí by súkromná, ale ako ne<strong>sk</strong>ôr sami zistíte, pouitie1/2003 PC REVUE 109