YOUR LOGO C# ADO.NET
YOUR LOGO Úvod – ADO.NET ADO.NET zajišťuje přístup k databázím 2 koncepčně jedinečné styly -Připojeně -Odpojeně přechodné (offline) spojení Database ADO.NET klient
YOUR LOGO ADO.NET - poskytovatelé ADO.NET podporuje mnoho poskytovatelů Poskytovatel definuje základní množinu tříd vycházející ze System.Data Poskytovatel je optimalizován pro komunikaci s konkrétním DBMS System.Data -Connection - připojuje se k uložišti dat -Command – reprezentuje dotaz SQL, název procedury -DataReader – přístup k datům, směr dopředu, jen ke čtení -DataAdapter – přenáší data mezi volajícím a datovým uložištěm -Interní objekty pro operace nad daty (select, insert, update, delete)
YOUR LOGO Získávání dat v připojeném režimu 1.Otevření spojení ( SqlConnection ) 2.Spuštění dotazu ( SqlCommand ) 3.Výsledek se načte do „čtečky“( SqlDataReader ) 4.Uzavření „čtečky“ 5.Uzavření spojení SqlConnection SqlCommand SqlDataReader Databáze SqlParameter SqlParameter SqlParameter
YOUR LOGO Získávání dat v odpojeném režimu Data jsou „kešována“ v DataSetu 1.Otevření spojení ( SqlConnection ) 2.Naplnění DataSetu (užitím SqlDataAdapteru ) 3.Uzavření spojení 4.Modifikace dat v DataSetu 5.Otevření spojení 6.Uložení změn do DB 7.Uzavření spojení SqlConnection SqlDataAdapter DataSet Database
YOUR LOGO Komponenty ADO.NET SQL Server.NET Data Provider OleDb.NET Data Provider Oracle.NET Data Provider ODBC.NET Data Provider DataReader DbCommand Připojený režim DataSet DataAdapter Odpojený režim … DataContext Table<T> LINQ-to-SQL ObjectContext EntityObject Entity Framework …
YOUR LOGO LINQ LINQ je jednotný programovací model pro libovolný druh dat LINQ umožňuje dotazovat se na data nezávisle na datovém zdroji LINQ pro objekty LINQ pro ADO.NET -LINQ pro SQL -LINQ pro entity LINQ pro SQL
YOUR LOGO LINQ Rozšíření LINQ -LINQ pro Sharepoint -LINQ pro CRM -LINQ pro exchange -LINQ pro … Příklad: var query = from c in Customers where c.country == „Italy“ select c.CompanyName;
YOUR LOGO LINQ – podpora jazyka Lokální odvozování typů -Určení správného typu proměnné je ponechán na kompilátoru, který jej odvodí z výrazu přiřazeného do samotné proměnné Příklady: var a = 5; // a je deklarováno jako int var x = 2.3; // x jako double var p = default(string); // p jako string var u = null; // nelze odvodit typ lokální proměnné z null
YOUR LOGO LINQ – jak pracuje Kód: Customer[] Customers = GetCustomers(); var query = from c in Customers where c.Country == “Italy” orderby c.Name select new { c.Name, c.City }; Kompilátor: var query = Customers.Where( c => c.Country == “Italy”).OrderBy( c => c.Name).Select( c => new { c.Name, c.City } );
YOUR LOGO LINQ – podpora jazyka Rozšiřující metody rozšiřuje existující typ přidáním nových metod bez odvozování do nového typu Rozšiřující metoda musí být statická a veřejná První parametr je typ, který metoda rozšiřuje První parametr obsahuje klíčové slovo this Generický typ jako první parametr rozšiřuje množinu tříd Rozšiřující metody lze přetěžovat
YOUR LOGO LINQ – podpora jazyka Rozšiřující metoda – příklad: static class ExtensionMethod { public static decimal Double(this decimal d) { return d + d; } public static decimal Triple(this decimal d) { return d * 3; }
YOUR LOGO LINQ – pokračování Rozšiřující metody jsou záklaním rysem syntaxe Vykonání příkazu v DB je odloženo až do prvního přístupu k výsledkům dotazu Deklarativnější styl jazyka se lépe čte i udržuje Snadno se dotazujete na objekty, entity, databázové záznamy, uzly XML, …
YOUR LOGO LINQ - dotazy Dotazy pracují nad objekty implemetující rozhraní IEnumerable nebo IQueryable Klazuzule from -Míří na instanci třídy implementující rozhraní IEnumerable -Definuje datový zdroj dotazu -Typ proměnné odvodí kompilátor z typu datového zdroje -Lze použít více klauzulí where a spojovat tak různé datové zdroje Klauzuke Where -Udává filtrovací podmínku, jenž se aplikuje na datový zdroj -Překládá na rozšiřující metodu Where rozhraní IEnumerable
YOUR LOGO LINQ - dotazy Klauzule Where -V jednom dotazu může být více klauzulí where public static IEnumerable Where (this IEnumerable source, Func predicate) Klauzule Select -Určuje co se má vybírat z výsledků všech předchozích klauzulí a výrazů
YOUR LOGO LINQ - dotazy Klauzule Group a Into -Seskupuje výsledky podle klíče var query = from d in Developers group d by d.language into developersGroup select new { Language = developersGroup.Key, DevelopersCount = DevelopersGroup.Count() }
YOUR LOGO LINQ - dotazy Klauzule OrderBy -Umožňuje vzestupně či sestupně třídit výsledky dotazu Klazule Join -Spojuje různé datové zdroje na základě členů zdrojů, u nichž lze zjišťovat rovnost -Srovnávání se provádí pomocí speciálního slova „equals“ -U equals záleží na pořadí operandů -Levý klíč představuje vnější sekvenci zdrojů, pravý vnitřní zdroj var result = from c in Categories join p in Products on c.IdCategory equals p.IdCategory …
YOUR LOGO LINQ – operátory Any -Vrací TRUE, jestliže ve zdrojové sekvenci existuje prvek, který vyhovuje zdanému predikátu -Metoda končí ihned, jakmile je dostupný výsledek bool result = (from c in Customers from o in c,Orders select o).any( o => o.IdProduct == 1)
YOUR LOGO LINQ – operátory All -Vrací TRUE, kdy podmínce vyhovují všechny elementy ve zdrojové sekvenci bool result = (from c in Customers from o in c.Orders select o).All(o => o.Quantitu > 0);
YOUR LOGO LINQ – operátory Take -Parametr count představuje počet položek, teré se vyberou ze zdrojové sekvence First -Vybírá první parametr ze sekvence FirstOrDefault -Podobné jako First, pokus neexistuje nevrátí chybu
YOUR LOGO ORM model ORM model přístupu k datům -Mapuje databázové tabulky na třídy a objekty -Objekty jsou automaticky ukládány do databáze -Operace mohou probíhat v připojeném a odpojeném režimu Výhody -Zvyšuje produktivitu práce, méně kódu -Pracujete s objekty a jejich vztahy namísto tabulek a SQL dotazů -Integrovaný mechanismus dotazování na objekty 21
YOUR LOGO ORM model Nevýhody -Méně flexibility – SQL příkazy jsou automaticky generovány -Výkonnostní problémy (někdy) Relační databáze ORM Entity (C# třídy) ORM Framewor k
YOUR LOGO ORM model ORM nástroje v.NET Framework a VS -LINQ to SQL -ADO.NET EntityFramework ORM nástroje třetích stran -Nhibernate -Telerik Open Acces ORM -MicroORM -Lightspeed
YOUR LOGO LINQ to SQL ORM framework pro SQL server Definujete množinu objektů jako abstraktní vrstvu nad relačními daty Dotazujete se pomocí LINQ Mapování mezi entitami a databázovou strukturou je popsáno v metadatech Třída DataContext obstarává komunikaci mezi LINQ a relačním datovým zdrojem