1.98k likes | 2.07k Views
Vizuális programozás. Adatbázisok elérése. 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
E N D
Vizuális programozás Adatbázisok elérése
Adatbázisok elérése1 • Közvetlen elérés - minden adatbázismotorhoz külön függvénygyűjtemény • Absztrakciós rétegen keresztül • Open DataBaseConnectivity (ODBC), közös függvényhalmaz, amivel minden DB elérhető. Az ODBC rétegben levő driverek lefordítják. • Object Linking and EmbeddingDataBase (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 (ObjectRelationalMapping), a programozó objektumokkal dolgozik J.Zs.Cs.: Vizuális programozás (c) 2014
ODBC ODBC réteg Oracle Driver Oracle MS SQL Driver MS SQL Metódushívás Alkalmazás mySQL Driver MySQL … Driver J.Zs.Cs.: Vizuális programozás (c) 2014
OLE-DB Alkalmazás OLE-DB Consumer OLE-DB Provider Adatforrás specifikus API Adatforrás J.Zs.Cs.: Vizuális programozás (c) 2014
Microsoft/Windows Data Access Components (MDAC/WDAC) J.Zs.Cs.: Vizuális programozás (c) 2014 Kép forrása: http://msdn.microsoft.com/en-us/library/ms810810.aspx
Adatbázisok elérése2 • 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 J.Zs.Cs.: Vizuális programozás (c) 2014
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 (dataprovider): 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 J.Zs.Cs.: Vizuális programozás (c) 2014
ADO.NET J.Zs.Cs.: Vizuális programozás (c) 2014 Ábra forrása: http://swechhaindia.wordpress.com/author/swechhaindia/page/3/
Többrétegű alkalmazás Presentationtier Megjelenítési réteg • windowsforms • 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 J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat alapú adatelérés • Select • Tárolt eljárás Kliens alkalmazás Olvasás DataReader Command Windows Forms, WPF, Konzol, XAML Connection Írás Command • Insert • Update • Delete • Stored procedure Web Forms Adatbázis J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat nélküli adatelérés DataSet DataTable DataTable Update() Fill() DataAdapter TableAdapter SelectCommand SelectCommand UpdateCommand UpdateCommand InsertCommand InsertCommand DeleteCommand DeleteCommand Connection SQL Server J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) 2010 Forrás: Albert István Okos kliens fejlesztése a .NET platformra
Adat objektumokProvider-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 J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
Telepített DP-k kiíratása DataTabledtDataProviderek = DbProviderFactories.GetFactoryClasses(); stringProviderLista = ""; foreach (DataRowdrProviderek in dtDataProviderek.Rows) { ProviderLista+= (String)(drProviderek.ItemArray[0])+ "\t" + (String)(drProviderek.ItemArray[1]) + "\r\n\r\n"; } Console.WriteLine(ProviderLista); J.Zs.Cs.: Vizuális programozás (c) 2014
Provider osztályok • Connection • Command • DataReader • DataAdapter/TableAdapter J.Zs.Cs.: Vizuális programozás (c) 2014
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=;PASSWORD=;DESC=MySQL ODBC 3.51 Driver DSN;DATAB" +"ASE=Hallgatok;SERVER=localhost;PORT=3306"; • OleDbConnection - ODBCConnection • SQLConnection – Microsoft SQL Server • http://www.connectionstrings.com J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
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) J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
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
Consumer objektumok • DataSet/típusos DataSet • DataTable/típusos DataTable • DataRow • DataColumn • Relation J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) 2010
DataSet felépítése DataSet Tables Table Columns Column Constraints Rows Row Relations Relation J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014 J.Zs.Cs.: Vizuális programozás (c) 2010
Típusos DataSet létrehozásalé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
Automatikusan generált osztályok J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat alapú adatbázis elérésLeké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 J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat alapú lekérdezés példa J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolatalapú adatbáziselérésBeszú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 J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat alapú beszúrás példa J.Zs.Cs.: Vizuális programozás (c) 2010 J.Zs.Cs.: Vizuális programozás (c) 2014
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) aFill() metódus meghívásával J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat nélküli adatbeolvasás példa - típus nélküli DataSet J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat nélküli – adatbeolvasás típusos DataSet-be J.Zs.Cs.: Vizuális programozás (c) 2010 J.Zs.Cs.: Vizuális programozás (c) 2014
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); J.Zs.Cs.: Vizuális programozás (c) 2014
Kapcsolat létrehozása vizuális eszközökkel J.Zs.Cs.: Vizuális programozás (c) 2014
Adatlista a kapcsolat felhasználásával J.Zs.Cs.: Vizuális programozás (c) 2014
DS-ben tárolt adatok módosítása1 • 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() J.Zs.Cs.: Vizuális programozás (c) 2014
DataSet-ben tároltadatok módosítása2 • Rekordhozzáadása • Rekordmódosítása J.Zs.Cs.: Vizuális programozás (c) 2014
DataSet-ben tároltadatokmódosítása3 • Törlés J.Zs.Cs.: Vizuális programozás (c) 2014
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 J.Zs.Cs.: Vizuális programozás (c) 2014
LINQ Language INtegrated Query J.Zs.Cs.: Vizuális programozás (c) 2014
LINQ • Cél: egy egységes eszközkészlet objektumokban tárolt adatok (~ toObjects) , XML adatok (~ to XML), relációs adatok (~ toDataSet, ~ to SQL), Entity Framework (L2E) lekérdezésére • Új nyelvi elemek • Lekérdező kifejezések (queryexpressions) • Lekérdező operátorok (query operators) • Erősen típusos kifejezések • .Net keretrendszer ≥ 3.5 J.Zs.Cs.: Vizuális programozás (c) 2014
LINQ to Objects 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<T> interfészt • A System.Collections névtér gyűjteményei nem implementálják J.Zs.Cs.: Vizuális programozás (c) 2014
Megoldás • Átalakítás J.Zs.Cs.: Vizuális programozás (c) 2014