Universal Windows Platform bevezető Mobil alkalmazások Universal Windows Platform bevezető
Irodalom és elérhető példaprogramok Universal Windows Platform Tech Ready 15 10/13/2018 Irodalom és elérhető példaprogramok Universal Windows Platform Visual Studio 2015 és a Blend Programok futtatása © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Irodalom és elérhető példaprogramok © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Irodalom Windows 10 development for absolute beginners https://channel9.msdn.com/Series/Windows-10-development-for-absolute-beginners Kezdésnek nagyon jó XAML bevezetés egyes részeit át is lehet ugrani Elég sok témát körbejár és azokat részletesen bemutatja Készít komplexebb alkalmazásokat is A példaprogramok letölthetőek
Irodalom A Developer's Guide to Windows 10 https://mva.microsoft.com/en-US/training-courses/a-developers-guide-to-windows-10-12618?l=IV8HDBpRB_9005095281 Ugyanennek a régi változata: https://mva.microsoft.com/en-US/training-courses/a-developer-s-guide-to-windows-10-11341 Inkább az újdonságokra koncentrálnak, de mutatnak példákat is
Irodalom Microsoft által közzétett példaprogramok: https://github.com/Microsoft/Windows-universal-samples Folyamatosan frissítik Több mint 200 példa elég széles témakörben A projektek nem feltétlen működnek, de a forráskód és felület kódja így is elég hasznos
Irodalom Guide to Universal Windows Platform (UWP) apps: https://msdn.microsoft.com/hu-hu/library/windows/apps/dn894631.aspx
Universal Windows Platform 10/13/2018 7:44 AM Universal Windows Platform © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Universal Windows Platform Egységesített API (Application Programming Interface) Egy alkalmazás minden eszközön fusson
Sok API-t biztosítanak
Universal Windows Platform Fejleszthetünk univerzális alkalmazást is, ami minden platformon elvileg elfut, de van lehetőség csak egy adott platformra is fejleszteni Egységesített alkalmazásbolt is létrejött A korlátozással megakadályozzuk, hogy a lehető legtöbb felhasználót elérjük A különböző felületek létrehozásában segít az Adaptive UI
Windows app A fordítás során egyetlen bináris keletkezik, nincs külön platformokra fordítás
Visual Studio 2015 & Blend 10/13/2018 7:44 AM © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Visual Studio 2015 telepítése Fejlesztéshez a Visual Studio 2015 Enterprise változatát használjuk Letölthető a DreamSpark-ról Mindenkinek egyedi kulcsot kell generáltatni magának, nincs közös kulcs (Lab installer key) mint a 2013-as változat esetében Alapértelmezett beállításoknál nem kapjuk meg az UWP fejlesztéséhez szükséges eszközkészletet Ki kell választani a Universal Windows App Development Tools-t
Universal Windows App Development Tools
Blend Designer-eknek készült alkalmazás Korábban is létezett már Expression Blend néven WPF alkalmazásokat nem lehetett már a 4-es verzióval szerkeszteni Teljesen megújították, mivel gyakorlatilag a Visual Studio egy új ablakban való futtatását jelenti csak nem a megszokott kinézettel A programot innen is tudjuk futtatni és akár itt is elkezdhetjük az alkalmazás fejlesztését Lehetővé teszi ő is, hogy különböző méretű képernyőkön megtekintsük az elkészült felületet
Blend A megnyitásához a Visual Studio-ban ki kell választani a design-olni kívánt elemet (xaml állományt), majd Design in Blend-et kell választani
Blend
Visszatérés Visual Studio-ba Visual Studio észreveszi, hogy változás történt az egyik fájlban
10/13/2018 7:44 AM Első alkalmazás © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Blank app Üres alkalmazást hozhatunk létre Nincs itt egy példa, hogy ne legyen minden alkalmazás egyforma
Helyi gépen való futtatás Windows 10 esetében lehetséges helyi gépen való futtatás Ezt a funkciót engedélyezni kell
Helyi gépen való futtatás Az alábbi beállítást keressük meg
Helyi gépen való futtatás Engedélyezzük a fejlesztői lehetőségeket
Projektfájl Project.json Beállíthatjuk, hogy a csomaggal milyen függőségekkel (dependencies) érkezzen, hol futhat (runtimes) és milyen keretrendszert használ (frameworks) Nem kell kézzel módosítani, mert ha NuGet-ből hozzáadunk egy csomagot az itt tárolódik
Package.appxmanifest
Package.appxmanifest
Package.appxmanifest
Programok futtatása 10/13/2018 7:44 AM © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Futtatás szimulátoron Helyi gépen való futtatáson túl rendelkezésre állnak Windows Phone emulátorok is Különböző képernyőmérettel és memóriával rendelkező eszközökön tesztelhetünk
Futtatás szimulátoron IoT eszközök (pl.: Raspberry Pi 2) való futtatás esetében a Remote Machine-t kell választani, valamint a beállításoknál meg kell adni az eszköz IP címét
Futtatás szimulátoron Mellékhatása, hogy Hyper-V-t használ, ami a többi szimulációs technológiát letiltja Előtte azért rákérdez mielőtt elindítaná a virtuális gépet Egyszerre akár több is futhat belőle (ha van elég erőforrásunk)
Futtatás szimulátoron
Futtatás az eszközön Ha a Device-t kiválasztva szeretnénk futtatni az eszközön az alábbi hibát kaphatjuk
Futtatás az eszközön Windows 10-et futtató telefonon futtatni tudjuk az UWP alkalmazásunkat Telefonon való futtatáshoz developer unlock-olni kell a telefont Ehhez kell egy microsoft id (régen live id) A license $19 egyéni fejlesztőknek, cégeknek $99 Ha diákok vagyunk és az email címünk regisztrálva van a DreamSpark-ban akkor ingyenes és 2-3 alkalmazást fel tudunk tenni így a készülékre
Készülék beállításai A készüléknél fontos, hogy a futtatás előtt a képernyő fel legyen oldva, ellenkező esetben nem kerül telepítésre az alkalmazást Jól legyen beállítva a dátum és idő a telefonon
Telefon regisztrálása Windows Phone Developer Registration programmal tudjuk regisztrálni a készüléket Internet kapcsolat szükséges
Telefon regisztrálása
Telefon regisztrálása Ha minden jól ment sikeresen regisztrálva lett a készülékünk
10/13/2018 7:44 AM Egyéb © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Támogatott operációs rendszerek Windows 10 „Legjobb élményt adja” az universal alkalmazások létrehozásához Szimulátoron, helyi gépen, stb. lehet futtatni az alkalmazásunkat Windows 8.1 Kevesebb helyen próbálhatjuk ki az alkalmazást (pl.: nincs helyi gépen való futtatás) Windows 7 Nincs emulátor Nincs Hyper-V támogatás Eszközön való futtatás ettől még lehetséges
Projekt template-ek Üres alkalmazás (Blank app) Visual C# -> Windows -> Windows Universal -> Black App (Windows Universal) Class library-ben tárolhatjuk a kódunk egy részét Megfelelően megtervezett programnál ez elvárható Shared project Hasonlóan lehet felfogni mint a class library projektet viszont itt nem készül külön szerelvény, hanem a futtatható projektünkbe bemásolódik az ide elhelyezett kód Pl. ezt használja a Xamarin is, amivel C# nyelven lehet írni Android és iOS alkalmazást is, a közös kódbázist pedig shared project-ekbe tárolja Unit test app Egységteszt az UWP alkalmazásokhoz
Live Visual Tree A futó alkalmazásban az összes látható elemet megjeleníti Tudunk keresni név alapján az elemek között Ha valami nem töltődik be frissíteni lehet a fát (Refresh) A csomópontokat össze lehet húzni és szétnyitni attól függően mit szeretnénk látni
Live Visual Tree Ha kiválasztunk egy elemet arra jobb klikk és megnézhetünk a XAML kódját Preview selection gombra megyünk akkor ha kiválasztok egy elemet a fában akkor a XAML-ben is odaugrik
Live Visual Tree Enable selection: kiválaszthatjuk az egyes elemeket a futó alkalmazások felületén
Live Visual Tree Layout adomers: ha az enable selection is be van kapcsolva akkor megmutatja az elemek méretét (kékkel) és margin értékét (sárgával)
Live Property Explorer Ha kiválasztunk egy elemet azok tulajdonságait is megmutatja azonnal Így kideríthető miért lett mondjuk a gomb színe piros, ami nem biztos, hogy a designer-ből előjön, stílusok jöhetnek sokféle helyről A tulajdonságra jobb klikk és annak forrásához is el lehet jutni Hol van pl. beállítva a háttérszín Menet közben tudjuk változtatni egy tulajdonság értékét, ami azonnal megjelenik a felületen Pl.: Grid sorának magasságát
Live Property Explorer Új tulajdonságot is hozzáadhatunk A változtatásokat vissza lehet állítani Adatkötésből származó hibák felderítése Live Visual Tree-nél kiválasztjuk az element selector-t és odaugrunk a XAML-ben Utána a tulajdonságoknál keressük a DataContext-et és láthatjuk milyen nevű elemek vannak hozzákötve Ha nem látjuk ezeket az ablakokat akkor a Debug -> Windows helyen megtaláljuk
Profiling eszközök Erőforrások vizsgálatára tudjuk használni (CPU, RAM, hálózat) Így indítsuk az alkalmazást: Debug -> Start Diagnostic tools without debugging..
10/13/2018 7:44 AM XAML vezérlők © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Layout vezérők <Border Thickness="" Brush="" /> <Canvas /> WinHEC 2015 10/13/2018 7:44 AM Layout vezérők <Border Thickness="" Brush="" /> <Canvas /> <Grid /> <RelativePanel /> <ScrollViewer /> <SplitView DisplayMode="" /> <StackPanel Orientation="" /> <VariableSizedWrapGrid /> <ViewBox Stretch="" /> ViewBox: a benne eltárolt tartalmat egy meghatározott méretre felnagyítja © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Canvas WinHEC 2015 10/13/2018 7:44 AM Alap rajzol © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
StackPanel WinHEC 2015 10/13/2018 7:44 AM Elhelyez fenntről és lesz © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Grid WinHEC 2015 10/13/2018 7:44 AM Sor oszlop © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
WrapGrid WinHEC 2015 10/13/2018 7:44 AM Sor oszlop átrak © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
ScrollViewer WinHEC 2015 10/13/2018 7:44 AM Görgetős © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
WinHEC 2015 10/13/2018 7:44 AM ViewBoxv Igazytja amihez kell hogy látja © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
RelativePanel A gyermek elemek egy része horgonyként (anchor) viselkedik A benne található elemek elhelyezkedése más elemektől függenek, illetve az őket tartalmazótól Vizuális állapotokkal (később szó lesz róla) együtt jól használható
Nyomógombok <Button Content="" /> <HyperlinkButton /> <RepeatButton /> <ToggleButton IsChecked="" />
Szöveget megjelenítő vezérlők <TextBox Text="" /> <PasswordBox Text="" /> <TextBlock Text="" /> <RichEditBox Content="" /> <RichTextBlock Content="" /> <BitmapIcon UriSource="" /> <FontIcon Glyph="" /> <SymbolIcon Icon="" /> <PathIcon Data="" />
Választó elemek <CalendarView /> <DatePicker Date="" /> <TimePicker Time="" /> <ToggleSwitch IsChecked="" /> <CheckBox IsChecked="" /> <RadioButton IsChecked="" /> <ComboBox /> <ListBox /> <Slider Minimum="" Maximum="" />
Kollekciótípusok/adatvezérlők WinHEC 2015 10/13/2018 7:44 AM Kollekciótípusok/adatvezérlők <ItemsControl ItemsSource="" /> <FlipView /> <GridView /> <ListView /> <SematicZoom /> <Hub Orientation="" /> <ContentControl ControlTemplate="" /> <DataTemplate /> <ItemsPanelTemplate /> <ControlTemplate /> <ContentPresenter /> <ItemsPresenter /> <ContentControl /> DataTemplate: egy adat objektum vizuális struktúráját írja le ItemsPanelTemplate: pl.: olyan ListBox-ot szeretnénk, ahol nem vertikálisan hanem horizontálisan lesznek rendezve az elemek ControlTemplate: egy vezérlő vizuális struktúráját definiálja; ezzel lehet saját kinézetű vezérlőket létrehozni ContentControl: olyan vezérlő, ami egy másik vezérlőt tartalmaz ContentPresenter: vezérlő Content tulajdonsága állítható egy saját kinézet leírásánál; a helyet foglalja a tartalomnak ItemsPresenter: lényegében ugyanaz, mint az előző csak ItemsControl-tól öröklődő vezérlőkre vonatkozik, ahol van Items tulajdonság; tehát az elemek tartalmának megjelenítésért felel © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
GridView
ListView
FlipView
App bar és Command bar <AppBar /> <CommandBar /> <AppBarButton Label="" Icon="" /> <AppBarToggleButton IsChecked="" /> <AppBarSeparator />
10/13/2018 7:44 AM Blend © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Designer felület A kiválasztott felületet láthatjuk középen XAML kód is elérhető
Solution Explorer Projekthez tartozó fájlokat láthatjuk, ugyanúgy mint a Visual Studio esetében
Assets Felületre elhelyezhető vezérlők, alkalmazható stílusok, viselkedések, alakzatok, képek, stb.
Visual States Vizuális állapotok, pl.: mobile, tablet, desktop Ha piros pötty megjelenik a vizuális állapot mellett akkor az összes változást megjegyzi az adott állapothoz
Data DataContext-hez adatforrás beállítása
Object and Timeline Adott XAML felülethez tartozó elemek (vizuális fa) Itt lehet létrehozni animációt is
Properties A kiválasztott objektum tulajdonságai
10/13/2018 7:44 AM SQLite browser © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
SQLite adatbázis létrehozása Adatbázis létrehozására két lehetőségünk van: C# kódból létrehozzuk az első induláskor az adatbázist (pl.: App.xaml.cs OnLaunched függvényében) Egy előre létrehozott adatbázis struktúrát mellékelünk a programhoz és azt átmásoljuk az első indításkor az írható/olvasható tárterületre Utóbbi lehetőség jobb megoldás bonyolultabb adatbázis szerkezet esetén Ettől függetlenül a táblákat reprezentáló osztályokat ebben az esetben is létre kell (legalábbis nagyon ajánlott) hozni Alapértelmezetten az sqlite.org-tól csak egy parancssoros felületet kapunk, viszont kiegészíthetjük más gyártótól való grafikus alkalmazással
WinHEC 2015 10/13/2018 7:44 AM SQLite browser Grafikus felületet biztosít az SQLite relációs adatbázis létrehozásához http://sqlitebrowser.org/ Természetesen lehet használni más grafikus alkalmazást is az SQLite-hoz. © 2015 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Adattípusok SQLite v3-ban Gyengén típusos Minden oszlop tud bármilyen típust tárolni, de ajánlott megadni milyen típust használunk Adattípusok: NULL INTEGER – előjeles egész szám, 1, 2, 3, 4, 6, vagy 8 bájton tárolhatunk vele számokat REAL – 8 bájtos IEEE lebegőpontos számábrázolás TEXT – szöveg tárolása UTF-8, UTF-16BE vagy UTF-16LE kódolással BLOB – komplex adatok tárolása
Adattípusok SQLite v3-ban Boolean érték tárolása Nincs külön erre kialakított típus Megoldásként használjunk INTEGER típus, ahol 0 tárolja a hamis, 1 pedig az igaz értéket Dátum és idő típus Megoldások: TEXT: ISO8601 szabvány szerinti szöveg ("YYYY-MM-DD HH:MM:SS.SSS") REAL: INTEGER: 1970-01-01 00:00:00 UTC óta eltelt idő másodpercben
SQLite browser bemutatása Példa: bevásárló lista 7 tábla Több 100 rekord 5 külső kulcs Példa: Szótár 3 tábla
10/13/2018 7:44 AM SQLite PCL © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
ORM és PCL összehasonlítás SQLite-NET LINQ, lightweight ORM SQLitePCL SQL, C API using (var conn = new SQLiteConnection("demo.db")) { Customer customer = null; using (var statement = conn.Prepare( "SELECT Id, Name FROM Customer WHERE Id = ?")) { statement.Bind(1, customerId); if (SQLiteResult.DONE == statement.Step()) { customer = new Customer() { Id = (long)statement[0], Name = (string)statement[1] }; } var db = new SQLite.SQLiteAsyncConnection(App.DBPath); var _customer = await (from c in db.Table<Customer>() where c.Id == customerId select c).FirstOrDefaultAsync(); if (customer != null) { var Id = _customer.Id; var Name = _customer.Name; }
Bővítmény telepítése VS 2015 -> Tools -> Extensions and update -> keressünk erre (Online kategória): sqlite-uap -> Download/Install -> VS 2015 újraindítása
SQLite PCL hozzáadása a projekthez References -> Manage NuGet Packages
SQLite PCL hozzáadása a projekthez Jobb klikk a References-re -> Add Reference
SQLite PCL Az SQLite PCL egy vékony wrapper-t jelent az SQLite ‚C’ API-ja felett Az adatbázissal SQL utasítások segítségével tudunk kommunikálni, amely parancsokat szövegként tudunk megadni
Adatbázis és táblák létrehozása private void LoadDatabase() { // Get a reference to the SQLite database conn = new SQLiteConnection("sqlitepcldemo.db"); string sql = @"CREATE TABLE IF NOT EXISTS Customer (Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Name VARCHAR( 140 ), City VARCHAR( 140 ), Contact VARCHAR( 140 ) );"; using (var statement = conn.Prepare(sql)) { statement.Step(); } }
Új sor hozzáadása // SqlConnection was opened in App.xaml.cs and exposed through property conn var db = App.conn; try { using (var custstmt = db.Prepare("INSERT INTO Customer (Name, City, Contact) VALUES (?, ?, ?)")) { custstmt.Bind(1, customerName); custstmt.Bind(2, customerCity); custstmt.Bind(3, customerContact); custstmt.Step(); } } catch (Exception ex) { // TODO: Handle error }
Lekérdezés public Customer GetCustomer(int customerId) { Customer customer = null; using (var statement = dbconn.Prepare("SELECT Id, Name, City, Contact FROM Customer WHERE Id = ?")) { statement.Bind(1, customerId); if (SQLiteResult.DONE == statement.Step()) { customer = new Customer() { Id = (long)statement[0], Name = (string)statement[1], City = (string)statement[2], Contact = (string)statement[3] }; } } return customer; }
Módosítás // See if the customer already exists var existingCustomer = GetCustomer(customer.Id); if (existingCustomer != null) { using (var custstmt = dbconn.Prepare("UPDATE Customer SET Name = ?, City = ?, Contact = ? WHERE Id=?")) { // NOTE when using anonymous parameters the first has an index of 1, not 0. custstmt.Bind(1, customer.Name); custstmt.Bind(2, customer.City); custstmt.Bind(3, customer.Contact); custstmt.Bind(4, customer.Id); custstmt.Step(); } }
Törlés public void DeleteCustomer(int customerId) { using (var statement = dbconn.Prepare("DELETE FROM Customer WHERE Id = ?")) { statement.Bind(1, customerId); statement.Step(); } }
Tranzakciók ACID elvek A tranzakción belül megadott összes parancs végrehajtódik vagy egyik sem SQLite PCL esetében BEGIN TRANSACTION paranccsal indíthatjuk a tranzakciót A tranzakció addig tart, amíg ki nem adjuk a COMMIT TRANSACTION vagy a ROLLBACK TRANSACTION-t Ha simán bezárjuk az adatbázist a rollback fog végrehajtódni
Manuális tranzakció using (var statement = dbconn.Prepare("BEGIN TRANSACTION")) { statement.Step(); } // Execute one or more statements… using (var custstmt = dbconn.Prepare( "INSERT INTO Customer (Name, City, Contact) VALUES (?, ?, ?)")) { ... } using (var projstmt = dbconn.Prepare( "INSERT INTO Project (Name, Title, DueDate, CustomerId) VALUES (?, ?, ?, ?)")) { ... } // COMMIT to accept all changes or ROLLBACK TRANSACTION to discard pending changes using (var statement = dbconn.Prepare("COMMIT TRANSACTION")) { statement.Step(); }
Külső kulcs megszorítás létrehozása CREATE TABLE utasításban kell megadni Utólagos létrehozásnál ALTER TABLE-t kell használni CREATE TABLE IF NOT EXISTS Project (Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, CustomerId INTEGER, Name VARCHAR( 140 ), Description VARCHAR( 140 ), DueDate DATETIME, FOREIGN KEY(CustomerId) REFERENCES Customer(Id) );
Külső kulcs megszorítások kikényszerítése A külső kulcs megszorítások definiálása a táblákon nem elegendő, mivel a külső kulcs megszorítások alapértelmezetten le vannak tiltva (a visszafelé való kompatibilitás miatt) Engedélyezhető a futás időben a PRAGMA paranccsal // Turn on Foreign Key constraints sql = @"PRAGMA foreign_keys = ON"; using (var statement = dbconn.Prepare(sql)) { statement.Step(); }
Egyéb megszorítások Type Description SQLite-NET PRIMARY KEY Defines the column(s) of the primary key - 1 per table max Declare by using [PrimaryKey] attribute UNIQUE Column constraint enforces unique values in that column Declare by using [Unique] attribute NOT NULL Column constraint prevents null values No way of declaring with SQLite.NET CHECK Column or Table constraint: constraint expression is evaluated on every insert or update, and if ‘0’ returned, constraint fails További információ itt érhető el: http://sqlite.org/lang_createtable.html
Index-ek A táblák elsődleges kulcsaihoz (PRIMARY KEY-vel jelölt oszlopok) automatikusan létrejön index // Create index on Foreign Key column sql = @"CREATE INDEX IF NOT EXISTS fk_customer_project_idx ON project (customerId) ASC"; using (var statement = dbconn.Prepare(sql)) { statement.Step(); }
10/13/2018 7:44 AM SQLite.NET © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
SQLite.NET Objektum-orientáltan tudjuk kezelni az SQL adatbázisunkat (ORM) Beégetett SQL utasítások helyett függvényeket és linq lekérdezéseket használhatunk A függvényeknek létezik aszinkron változata is
Adatbázis létrehozása public bool CreateDatabase() { try using (var db = new SQLite.SQLiteConnection(_databasePath)) // tábla létrehozása var t = db.CreateTable<Todo>(); var tableinfo = db.GetMapping(typeof(Todo)); Debug.WriteLine("tableinfo" + tableinfo); return true; } catch (SQLite.SQLiteException exception) Debug.WriteLine("SQLiteException exception: " + exception.Message); return false;
Lekérdezések (összes elem lekérdezése) public IEnumerable<Todo> GetAllTodo() { using (var db = new SQLite.SQLiteConnection(_databasePath)) return (from t in db.Table<Todo>() select t).ToList(); }
Alacsony szintű lekérdezés public IEnumerable<Todo> LowLevelQuery() { using (var db = new SQLite.SQLiteConnection(_databasePath)) return db.Query<Todo>("SELECT * FROM Todo"); // List<Todo>-t ad vissza }
Hozzáadás public bool InsertTodo(Todo todo) { try using (var db = new SQLite.SQLiteConnection(_databasePath)) var insertinfo = db.Insert(todo); Debug.WriteLine("insertinfo" + insertinfo); return true; } catch (SQLite.SQLiteException exception) Debug.WriteLine("SQLiteException exception: " + exception.Message); return false;
Módosítás public bool UpdateTodo(Todo todo) { try using (var db = new SQLite.SQLiteConnection(_databasePath)) var updateinfo = db.Update(todo); Debug.WriteLine("updateinfo" + updateinfo); return true; } catch (SQLite.SQLiteException exception) Debug.WriteLine("SQLiteException exception: " + exception.Message); return false;
Törlés public bool DeleteTodo(Todo todo) { try using (var db = new SQLite.SQLiteConnection(_databasePath)) var updateinfo = db.Delete(todo); Debug.WriteLine("updateinfo" + updateinfo); return true; } catch (SQLite.SQLiteException exception) Debug.WriteLine("SQLiteException exception: " + exception.Message); return false;
Példa Demo: SQLiteDotNet
SQLite-ot használó keretrendszerek Azure App Service Mobile Apps Entity Framework 7 01010 00100 10110 00100
Irodalomjegyzék A Developer's Guide to Windows 10 https://mva.microsoft.com/en-US/training-courses/a-developer-s-guide-to-windows-10-11341