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) 2014 2 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) 2014 5 Kép forrása: http://msdn.microsoft.com/en-us/library/ms810810.aspx

6 J.Zs.Cs.: Vizuális programozás (c) 2014 6 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) 2014 7 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) 2014 8 Ábra forrása: http://swechhaindia.wordpress.com/author/swechhaindia/page/3/

9 J.Zs.Cs.: Vizuális programozás (c) 2014 9 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) 2014 10 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) 2014 11 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) 2010 12 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) 2014 13 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) 2014 14 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) 2014 15 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) 2014 16

17 J.Zs.Cs.: Vizuális programozás (c) 2014 17 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 http://www.connectionstrings.com

18 J.Zs.Cs.: Vizuális programozás (c) 2014 18 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) 2014 19 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) 2014 20 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) 2014 21 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 http://msdn.microsoft.com/en- us/library/bb384426%28v=vs.100%29. aspx J.Zs.Cs.: Vizuális programozás (c) 2014 22

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

24 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) 2010 24 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) 2014 25 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) 2010 26 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) 2014 27

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

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

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

31 J.Zs.Cs.: Vizuális programozás (c) 2014 31 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) 2014 32 Kapcsolat alapú lekérdezés példa

33 J.Zs.Cs.: Vizuális programozás (c) 2014 33 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) 2010 34 Kapcsolat alapú beszúrás példa

35 J.Zs.Cs.: Vizuális programozás (c) 2014 35 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) 2014 36 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) 2014 37

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

39 J.Zs.Cs.: Vizuális programozás (c) 2014 39 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) 2014 40

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

42 J.Zs.Cs.: Vizuális programozás (c) 2014 42 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) 2014 43 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) 2014 44

45 J.Zs.Cs.: Vizuális programozás (c) 2014 45 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) 2014 46

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 ≥ 3.5 47

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

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, 2012. 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) 2014 55

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

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

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) 2014 58

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) 2014 59

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) 2014 60

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) 2014 61

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) 2014 62

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

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) 2014 65

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) 2014 66

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

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

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

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

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

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

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) 2014 73

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) 2014 74

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