Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Vizuális programozás Adatbázisok elérése. J.Zs.Cs.: Vizuális programozás (c) 2014 2 Adatbázisok elérése 1 Közvetlen elérés - minden adatbázismotorhoz.

Hasonló előadás


Az előadások a következő témára: "Vizuális programozás Adatbázisok elérése. J.Zs.Cs.: Vizuális programozás (c) 2014 2 Adatbázisok elérése 1 Közvetlen elérés - minden adatbázismotorhoz."— Előadás másolata:

1 Vizuális programozás Adatbázisok elérése

2 J.Zs.Cs.: Vizuális programozás (c) Adatbázisok elérése 1 Közvetlen elérés - minden adatbázismotorhoz külön függvénygyűjtemény Absztrakciós rétegen keresztül –Open DataBase Connectivity (ODBC), közös függvényhalmaz, amivel minden DB elérhető. Az ODBC rétegben levő driverek lefordítják. –Object Linking and Embedding DataBase (OLE DB) –kifele táblázatos formában mutatja az adatokat. Az adatforrások OLE DB provider-eken keresztül érhetők el COM objektumok segítségével. ODBC-t is elér. –Objektum-Relációs Leképezés (Object Relational Mapping), a programozó objektumokkal dolgozik

3 J.Zs.Cs.: Vizuális programozás (c) 2014 ODBC 3 Alkalmazás Metódushívás ODBC réteg Oracle MS SQL MySQL Oracle Driver MS SQL Driver mySQL Driver … Driver

4 J.Zs.Cs.: Vizuális programozás (c) 2014 OLE-DB Alkalmazás OLE-DB Consumer OLE-DB Provider Adatforrás Adatforrás specifikus API 4

5 Microsoft/Windows Data Access Components (MDAC/WDAC) J.Zs.Cs.: Vizuális programozás (c) Kép forrása:

6 J.Zs.Cs.: Vizuális programozás (c) Adatbázisok elérése 2 ActiveX Data Objects (ADO) – egy vékony réteg az OLE DB felett, a magas szintű nyelvek számára elérhetővé teszi azt. ADO.NET – ADO továbbfejlesztett, felügyelt változata LINQ – beágyazott SQL C# 3.0- tól a Cω-ból átvéve Entity Framework – ORM réteg,.NET 3.5-től

7 J.Zs.Cs.: Vizuális programozás (c) ADO.NET A.NET adatbáziskezelési osztálygyűjteménye Fő n évtér: System.Data Jellemzők Relációs adatok egyszerű elérése: osztályok oszlopok, sorok, táblák, adatbázis leírására Bővíthető: vannak beépített adatszolgáltatók (data provider) : MS SQL, Oracle, ODBC, OLE DB és továbbiak beszerezhetők: pl. mySQL Többrétegű alkalmazások támogatása Az XML és relációs adatelérés egységesítése Kapcsolatkészlet fenntartása, adatbáziskapcsolatok újrafelhasználása

8 ADO.NET J.Zs.Cs.: Vizuális programozás (c) Ábra forrása:

9 J.Zs.Cs.: Vizuális programozás (c) Többrétegű alkalmazás Presentation tier Megjelenítési réteg •windows forms •Wpf/XAML •web böngésző (web forms) •konzol Business tier (logic) Üzleti logikai réteg •adatokat feldolgozó szerver •adat objektumok •webszolgáltatások •.net remoting Data tier Adattároló réteg •DBMS •egyéb erőforrások

10 J.Zs.Cs.: Vizuális programozás (c) Adatelérési modellek Kapcsolat alapú (Connected Access) – pl. DataCommand, DataReader – ha az adatokat azonnal feldolgozzuk Kapcsolat nélküli (Disconnected Access) – pl. DataSet – lokális másolat az adatokról

11 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat alapú adatelérés Connection Command DataReader Command •Select •Tárolt eljárás •Insert •Update •Delete •Stored procedure Kliens alkalmazás Adatbázis Olvasás Írás Windows Forms, WPF, Konzol, XAML Web Forms

12 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat nélküli adatelérés TableAdapter DataSet SQL Server Data Adapter SelectCommand UpdateCommand InsertCommand DeleteCommand Connection DataTable SelectCommand Fill() Update() UpdateCommand InsertCommand DeleteCommand Okos kliens fejlesztése a.NET platformra Forrás: Albert István Okos kliens fejlesztése a.NET platformra

13 J.Zs.Cs.: Vizuális programozás (c) Adat objektumok Provider-Consumer modell Provider: adatforrás specifikus – ezek olvassák és írják az adatforrást Consumer: közös – ezekkel manipulálható a memóriában levő adat

14 J.Zs.Cs.: Vizuális programozás (c) Data Provider Híd az alkalmazás és az adatforrás között, ezen keresztül mozognak az adatok az alkalmazás és az adatbázis között Microsoft DP-k –SqlClient (MS SQL Server) –OracleClient (Oracle) –OleDb –Odbc Más cégektől

15 J.Zs.Cs.: Vizuális programozás (c) Telepített DP-k kiíratása DataTable dtDataProviderek = DbProviderFactories.GetFactoryClasses(); string ProviderLista = ""; foreach (DataRow drProviderek in dtDataProviderek.Rows) { ProviderLista+= (String)(drProviderek.ItemArray[0])+ "\t" + (String)(drProviderek.ItemArray[1]) + "\r\n\r\n"; }Console.WriteLine(ProviderLista);

16 Provider osztályok ConnectionCommandDataReaderDataAdapter/TableAdapter J.Zs.Cs.: Vizuális programozás (c)

17 J.Zs.Cs.: Vizuális programozás (c) Connection objektum A DP egyik komponense Kapcsolat az adattárhoz, ezen keresztül kommunikál az alkalmazás az adatbázissal ConnectionString – a kapcsolat beállításai this.odbcConnection1.ConnectionString = "STMT=;OPTION=3;DSN=Hallgatok;UID=;PASS WORD=;DESC=MySQL ODBC 3.51 Driver DSN;DATAB" + "ASE=Hallgatok;SERVER=localhost;PORT=3306"; OleDbConnection - ODBCConnection SQLConnection – Microsoft SQL Server

18 J.Zs.Cs.: Vizuális programozás (c) Command objektum Közvetlen hozzáférés a kapcsolt adatbázis adataihoz SQL parancsok vagy tárolt eljárások Az eredmény adatfolyam, amit DataReader olvashat vagy DataSet-be lehet betölteni Parameters tulajdonság: gyűjtemény, az SQL parancsok vagy tárolt eljárások bemenő és kimenő paraméterei Command típusok (osztályok) –System.Data.SqlClient.SqlCommand –System.Data.OleDb.OleDbCommand

19 J.Zs.Cs.: Vizuális programozás (c) DataReader objektum Gyors, csak előrehaladást engedélyező szerver oldali kurzorhoz hozzáférés Rekordokat tartalmazó adatfolyamon halad végig A Command objektum ExecuteReader metódusa egy DataReader-t ad vissza Az aktuális rekord egyes oszlopaiban tárolt adatokat típusuk szerinti metódusokkal lehet lekérdezni (pl. GetDouble)

20 J.Zs.Cs.: Vizuális programozás (c) DataAdapter objektum Híd a tábla és az adatforrás között Adatbázis parancsok Adatbázis kapcsolatok Alap típusok –OleDbDataAdapter –SqlDataAdapter – SQL Serverhez

21 J.Zs.Cs.: Vizuális programozás (c) TableAdapter Egy generált osztály típusos DataSet kezeléséhez Magába foglalja az alábbi objektumokat: –DataAdapter –Connection –Commands –Query –Parameters Minden táblához külön TableAdapter

22 TableAdapterManager Többtáblás DataSet-eknél kulcs-idegen kulcs kapcsolatok figyelembe vételével oldja meg az adatok mentését Típusos DataSet-nél automatikusan keletkezik Hierarchical update us/library/bb384426%28v=vs.100%29. aspx J.Zs.Cs.: Vizuális programozás (c)

23 Consumer objektumok DataSet/típusos DataSet DataTable/típusos DataTable DataRowDataColumnRelation J.Zs.Cs.: Vizuális programozás (c)

24 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) DataSet objektum Kapcsolat nélküli cache-ben tárol adatokat Az adatforrás adatainak lokális másolata Struktúrája egy relációs adatbázishoz hasonló Táblák, kapcsolatok A megkötések elsődleges és idegen kulcsokat igényelnek

25 J.Zs.Cs.: Vizuális programozás (c) DataSet felépítése Relation Row Column Table DataSet Tables Columns Constraints Rows Relations

26 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) Típusos DataSet További absztrakciós szint Az alap DataSet osztály leszármazottja Típusellenőrzést tesz lehetővé fordítási időben Gyorsabb hozzáférést biztosít az adathalmazban levő táblákhoz és rekordokhoz XML Schema (.xsd) leírás állományokból van generálva az XSD.exe segítségével Grafikusan (.xss,.xcs) Hozzáférés táblákhoz és oszlopokhoz –Típus nélküli esetben: dsNév.Tables["TáblaNév"] –Típusos esetben: dsNév.TáblaNév, dsAdatok.dtDolgozatok.HallgatóColumn

27 Típusos DataSet létrehozása létező adatbázisból Pl.: Access adatbázis állomány (1) Felvesszük a projektbe az adabázis állományt - elindul a varázsló (2) Data/Add New Data Source … J.Zs.Cs.: Vizuális programozás (c)

28 J.Zs.Cs.: Vizuális programozás (c)

29 Automatikusan generált osztályok J.Zs.Cs.: Vizuális programozás (c)

30 J.Zs.Cs.: Vizuális programozás (c)

31 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat alapú adatbázis elérés Lekérdezés Az eredmény egy szerver oldali kurzorba kerül, abból olvashatunk soronként DataReader segítségével Lépések Kapcsolati sztring összeállítása Kapcsolat létesítése az adatbázishoz Connection objektum segítségével SQL lekérdezés sztring összeállítása Kapcsolat megnyitása Command objektum létrehozása DataReader objektum létrehozása Rekordok kiolvasása DataReader objektum lezárása Kapcsolat lezárása

32 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat alapú lekérdezés példa

33 J.Zs.Cs.: Vizuális programozás (c) Kapcsolatalapú adatbáziselérés Beszúrás, Módosítás, Törlés Lépések Kapcsolat objektum létrehozása Kapcsolati sztring összeállítása Kapcsolat létesítése az adatbázishoz Connection objektum segítségével SQL utasítás sztring összeállítása Command objektum létrehozása Kapcsolat megnyitása SQL parancs végrehajtása ExecuteNonQuery Kapcsolat lezárása

34 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat alapú beszúrás példa

35 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat nélküli adatbázis elérés – adatok beolvasása Kapcsolat létesítése az adatbázissal egy Connection objektum segítségével Command objektum létrehozása és a Connection objektumhoz kapcsolása SQL parancsok összeállítása DataAdapter/TableAdapter/ TableAdapterManager objektum(ok) létrehozása DataSet objektum(ok) létrehozása Adatok bemásolása a DataSet-be (DataTable) a Fill() metódus meghívásával

36 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat nélküli adatbázis elérés – adatok beolvasása Egy DS-ben több tábla Egy DS több különböző forrásból szerezhet adatokat A DataAdapter vagy TableAdapter objektum Fill() metódusa gondoskodik a kapcsolat megnyitásáról és az adatok letöltéséről

37 Kapcsolat nélküli adatbeolvasás példa - típus nélküli DataSet J.Zs.Cs.: Vizuális programozás (c)

38 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) Kapcsolat nélküli – adatbeolvasás típusos DataSet- be

39 J.Zs.Cs.: Vizuális programozás (c) Több táblából álló DS – Kapcsolat létrehozása Az ADO.NET nem állítja elő automatikusan az adatbázis táblái közötti kapcsolatokat a DataSet táblái között A kapcsolat vizuális eszközökkel Visual Studio 2010-ben is beállítható Megoldás programból típusos DataSet esetén DataColumn dcElsődlegesKulcs = dsAdatok.dtÉrtékelés.JegyColumn; DataColumn dcIdegenKulcs = dsAdatok.dtDolgozatok.JegyColumn; DataRelation drKapcsolat = new DataRelation("Kapcsolat", dcElsődlegesKulcs, dcIdegenKulcs); dsAdatok.Relations.Add(drKapcsolat);

40 Kapcsolat létrehozása vizuális eszközökkel J.Zs.Cs.: Vizuális programozás (c)

41 Adatlista a kapcsolat felhasználásával J.Zs.Cs.: Vizuális programozás (c)

42 J.Zs.Cs.: Vizuális programozás (c) DS-ben tárolt adatok módosítása 1 Minden cella közvetlenül írható Sor törlése: meghívjuk DataRow objektum Delete() vagy Remove() metódusát A Remove() meghívja az AcceptChanges()-t is Beszúrás: –Új sorobjektum előállítása –Sorobjektum hozzáadása a tábla Rows gyűjteményéhez A DS tárolja az eredeti és a módosított adatokat –Elfogadás: AcceptChanges() –Visszavonás: RejectChanges()

43 J.Zs.Cs.: Vizuális programozás (c) DataSet-ben tárolt adatok módosítása 2 Rekord hozzáadása Rekord módosítása

44 DataSet-ben tárolt adatok módosítása 3 Törlés J.Zs.Cs.: Vizuális programozás (c)

45 J.Zs.Cs.: Vizuális programozás (c) Változások érvényesítése az adatbázisban A DataAdapter/TableAdapter objektum Update() metódusának meghívása A DataAdapter/TableAdapter elküldi a megfelelő INSERT, UPDATE, DELETE SQL utasításokat Az SQL utasításokat –a vizuális fejlesztés során automatikusan generálja a fejlesztőrendszer (nem minden adatbázis esetén támogatott, de pl. MS SQL-nél igen) –CommandBuilder objektummal állítjuk elő, de csak egytáblás adatbázisnál működik, és csak akkor, ha van elsődleges kulcs –a programozó írja meg

46 LINQ Language INtegrated Query J.Zs.Cs.: Vizuális programozás (c)

47 J.Zs.Cs.: Vizuális programozás (c) 2014 LINQ Cél: egy egységes eszközkészlet objektumokban tárolt adatok (~ to Objects), XML adatok (~ to XML), relációs adatok (~ to DataSet, ~ to SQL), Entity Framework (L2E) lekérdezésére Új nyelvi elemek – –Lekérdező kifejezések (query expressions) – –Lekérdező operátorok (query operators) Erősen típusos kifejezések.Net keretrendszer ≥

48 LINQ to Objects J.Zs.Cs.: Vizuális programozás (c)

49 J.Zs.Cs.: Vizuális programozás (c) 2014 Lekérdezések SQL kifejezésekhez hasonló A visszatérési érték típusa egyes esetekben fordításkor dől el Implicit típusok alkalmazása Előfeltétel: Az adatokat tároló objektum meg kell valósítsa a generikus IEnumerable interfészt A System.Collections névtér gyűjteményei nem implementálják 49

50 J.Zs.Cs.: Vizuális programozás (c) 2014 Megoldás Átalakítás 50

51 J.Zs.Cs.: Vizuális programozás (c) 2014 Szűrés típus alapján Különböző típusú objektumok egy ArrayList-ben Csak a string-ekre van szükség 51

52 J.Zs.Cs.: Vizuális programozás (c) 2014 Operátorok from x in y where orderby x ascending|descending group x by y into z select join, on, equals, into 52

53 J.Zs.Cs.: Vizuális programozás (c) 2014 Metódusok Distinct<>() Count<>() Union<>() Sum<>() Min<>(), Max<>() Intersect<>() Reverse<>() 53

54 J.Zs.Cs.: Vizuális programozás (c) 2014 Névtelen típus előállítása projekcióval 54

55 Feladat Három érdekes évszám: 2010, 2011, Ezek olyan egymást követő négyjegyű pozitív egész számok, amelyekben ugyanaz a három számjegy található és pontosan az egyikből van mindegyikben pontosan kettő. Keress további ilyen tulajdonságú négyjegyű pozitív egész szám hármasokat úgy, hogy a számjegyek összege legtöbb 21 lehet! Az alkalmazás célja az, hogy demonstráljon különböző LINQ lekérdezési lehetőségeket. J.Zs.Cs.: Vizuális programozás (c)

56 Demo Szótár Számok J.Zs.Cs.: Vizuális programozás (c)

57 Szökőévek keresése – hagyományos megoldás J.Zs.Cs.: Vizuális programozás (c)

58 Szökőévek keresése – névtelen metódus Eredeti Fordítás után (.Net Reflector) J.Zs.Cs.: Vizuális programozás (c)

59 Szökőévek keresése – LINQ lekérdezéssel Eredeti Fordítás után (.Net Reflector) J.Zs.Cs.: Vizuális programozás (c)

60 Szökőévek keresése – Lambda kifejezéssel Eredeti Fordítás után (.Net Reflector) J.Zs.Cs.: Vizuális programozás (c)

61 Csökkenő sorba rendezés – névtelen metódussal Eredeti Fordítás után (.Net Reflector) J.Zs.Cs.: Vizuális programozás (c)

62 Csökkenő sorba rendezés – lambda kifejezéssel Eredeti Fordítás után (.Net Reflector) J.Zs.Cs.: Vizuális programozás (c)

63 LINQ to ADO.NET LINQ to DataSets LINQ to XML LINQ to SQL J.Zs.Cs.: Vizuális programozás (c)

64 LINQ to DataSets

65 Átalakítás Típus nélküli DataSet.AsEnumerable() DataSet  IEnumerable DataSet  IEnumerable DataRow listaDataRow lista Field, SetField () Field, SetField ( table.Rows[i].SetField(columnIndex, value); ) CopyToDataTable ( var table = qres.CopyToDataTable (); ) J.Zs.Cs.: Vizuális programozás (c)

66 Lekérdezés Átalakítás –ToArray, ToDictionary, ToList–ToArray, ToDictionary, ToListElem –ElementAt, First–ElementAt, FirstAggregáció –Aggregate, Average, Count, LongCount, Max, Min, Sum J.Zs.Cs.: Vizuális programozás (c)

67 Aggregate és lambda kifejezés J.Zs.Cs.: Vizuális programozás (c)

68 Any és lambda kifejezés J.Zs.Cs.: Vizuális programozás (c)

69 J.Zs.Cs.: Vizuális programozás (c)

70 J.Zs.Cs.: Vizuális programozás (c)

71 J.Zs.Cs.: Vizuális programozás (c)

72 3 J.Zs.Cs.: Vizuális programozás (c)

73 Adat-megjelenítési lehetőségek Adatkötés: egy objektumot szeretnénk megjeleníteni a felhasználói felületen; ehhez össze kell kapcsolnunk egy vezérlővel az adatforrást Ha az adatoknak egy gyűjteménye áll rendelkezésünkre, akkor olyan vezérlőt kell választani, ami az ItemsControl osztályból származik –Listás megjelenítés esetében meg kell adni egy sablont (ItemTemplate), ami definiálja egy elem kinézetét –Táblázatos megjelenítésnél nincs szükség ItemTemplate-re J.Zs.Cs.: Vizuális programozás (c)

74 Adatkötés WPF-ben Egyirányú (Forrás->Cél, Cél -> Forrás ) Kétirányú A Cél tulajdonság DependencyProperty típusú kell legyen J.Zs.Cs.: Vizuális programozás (c)

75 Dependency Property Hasonló a hgyományos tulajdonsághoz, de annál komplexebb Főbb eltérések a tulajdonságokhoz képest –A tulajdonság közvetlenül olvassa ki a védett mezőből az adatokat –A Depencency Property dinamikusan gyűjti be az információt a GetValue() metódus meghívásával Ezt a függvényt a DependencyObject-től örökli

76 Dependency Property J.Zs.Cs.: Vizuális programozás (c) 2012

77 Dependency Property További eltérések: Adatmódosításnál (érték beállítása) a DependencyObject-től kapott dictionary-nek (kulcs-érték párok halmaza) adunk egy értékpárt A kulcs lesz az a tulajdonság, amit változtatni akarunk, az érték pedig amire be akarjuk állítani

78 Dependency Property Előnyei: –Kevesebb memóriát fogyasztunk Rengeteg adatot tárolunk a UI vezérlők adattagjaiban –Értékek öröklődése Ha lokálisan nincs érték beállítva, akkor a logikai fában felfelé haladva addig megyünk, amíg nem találunk értéket Pl.: FontSize-ot beállítjuk egy gyökér elemben, akkor az mindenre ki fog hatni (ha lokálisan nem változtatjuk meg)

79 Dependency Property Előnyei 2: –Értesítés a változásokról Beépített változás-értesítés Callback metódus segítségével kapunk értesítést a változásokról Adatkötésre is Dependency property-t használjuk (Binding)

80 Dependency property Létrehozása Visual Studioban –propdp - code snippet Kell egy statikus DepdencyProperty típusú mező, ami meghívja a DependencyProperty.Register() metódusát –A neve mindig Propety-vel kell, hogy végződjön! Register metódusban meg kell adni a –Tulajdonság nevét –Tulajdonság típusát –Tartalmazó típusát –Metadata típusát (ha nem akarjuk használni, null-t adhatunk neki)

81 Dependency property public string Tükör { get { get { return(string)GetValue(TukorProperty); return(string)GetValue(TukorProperty);} set { SetValue(TukorProperty, value); } set { SetValue(TukorProperty, value); }} public static readonly DependencyProperty TukorProperty = DependencyProperty.Register("Tukor", typeof(string), typeof(Tukorkep), null);

82 Attached property Speciális Dependency Property Pl.: Panel-től származó konténer elemek


Letölteni ppt "Vizuális programozás Adatbázisok elérése. J.Zs.Cs.: Vizuális programozás (c) 2014 2 Adatbázisok elérése 1 Közvetlen elérés - minden adatbázismotorhoz."

Hasonló előadás


Google Hirdetések