Grafikus C# – Windows Forms tanfolyam › 3.1 lecke Windows Forms · 3.1 lecke · felkészülés az adatbázisokra A programok többsége nem csak számol, hanem adatot is tárol: felhasználókat, termékeket, jegyzeteket. Ehhez adatbázis kell. Ebben a leckében megismered az SQLite adatbázist, a DB Browser for SQLite programmal létrehozod az első adatbázisodat és tábláidat, és kipróbálod az alapvető SQL lekérdezéseket, még C# kód nélkül.SQLite-alapok és DB Browser – táblák létrehozása

A lecke végére
- érted, mi az adatbázis, a tábla, az oszlop és a sor;
- tudod, mi az SQLite, és miért nem kell hozzá külön szerver;
- a DB Browser for SQLite programmal új adatbázist és táblát készítesz;
- kulcsot (
PRIMARY KEY) és egyedi értéket (UNIQUE) állítasz be; - kipróbálod a
CREATE TABLE,INSERTésSELECTutasításokat, aWHEREésORDER BYkulcsszóval; - nem felejted el a változtatások írását (
Write Changes).
Mielőtt elkezded
Ehhez a leckéhez nem kell C# kód, csak Windows és a DB Browser for SQLite program. Az SQL-t nulláról tanuljuk. Az előző fejezetek tudása a következő leckékben kell majd, amikor C# programból kapcsolódunk az adatbázishoz.
Mi az adatbázis és mi az SQLite?
Az adatbázis rendezett adatgyűjtemény, amelyet a program lekérdezhet és módosíthat. A leggyakoribb típus, a relációs adatbázis táblákból áll, a tábla pedig oszlopokból (mezőkből) és sorokból (rekordokból). Mint egy táblázat, de szigorúbb szabályokkal:
| id | felhnev | jelszo |
|---|---|---|
| 1 | tanulo | teszt123 |
| 2 | kata | almafa |
belepesi_adatok.Az SQLite egy kicsi, egyszerű adatbázis-kezelő, amely az egész adatbázist egyetlen fájlban (.db) tárolja. Nem kell hozzá külön szervert telepíteni vagy elindítani: a program közvetlenül a fájlt olvassa és írja. Ezért kiváló tanuláshoz, kisebb alkalmazásokhoz, mobilappokhoz és böngészőkhöz is.
Jósolj!
Az iskola adatbázisába egy tanulót két sorban szerepeltetsz: mindkettőben azonos név, azonos osztály, azonos születési dátum. Hogyan tudjuk megkülönböztetni a két rekordot?
Jóslat ellenőrzése
Egyedi azonosítóval, vagyis kulccsal (id), amelyből minden sornak más van. Ezért kap minden tábla egy id oszlopot, amelyet PRIMARY KEY (elsődleges kulcs) jelöl.
A DB Browser for SQLite
A DB Browser for SQLite egy ingyenes program, amellyel grafikusan készíthetsz és nézhetsz meg SQLite adatbázisokat. Töltsd le a hivatalos oldalról (keresd: DB Browser for SQLite), és telepítsd, vagy használd a hordozható (portable) változatot, amely telepítés nélkül is indul. Ha az iskolai gépeken csak a hordozható változat érhető el, azt is használhatod.
Mindig a hivatalos oldalról tölts le
Programot csak a készítő hivatalos oldaláról tölts le, ne ismeretlen letöltő oldalról. Az internetes „letöltő” oldalak sokszor kéretlen programokat is csomagolnak a telepítőhöz.
Mit tegyél ide: a DB Browser for SQLite főablaka induláskor, a négy lappal (Database Structure, Browse Data, Edit Pragmas, Execute SQL), és a felső eszközsoron a New Database és Open Database gombbal.Javasolt fájlnév: winforms-3-1-db-browser.webp · Alt szöveg: A DB Browser for SQLite főablaka a négy lappal
Az első adatbázis és tábla
- Indítsd a DB Browser for SQLite programot, és kattints a New Database gombra. Mentsd az adatbázist
belepes.dbnéven egy mappába, amelyet könnyen megtalálsz (később a C# projekt mellé fogod másolni). - A megnyíló Edit table definition ablakban a Table mezőbe írd:
belepesi_adatok. - Az Add gombbal vegyél fel három oszlopot a következő beállításokkal:
Név Típus Beállítás idINTEGER PK (primary key), AI (autoincrement: automatikus számozás) felhnevTEXT NN (not null: kötelező), U (unique: egyedi) jelszoTEXT NN (kötelező) - Kattints az OK gombra. A Database Structure lapon megjelenik a tábla.
REAL.Mit tegyél ide: az Edit table definition ablak a belepesi_adatok táblával: az id (INTEGER, PK, AI), a felhnev (TEXT, NN, U) és a jelszo (TEXT, NN) sora kitöltve.Javasolt fájlnév: winforms-3-1-tabla-definicio.webp · Alt szöveg: A belepesi_adatok tábla három oszlopának beállítása a DB Browserben
A tábla ugyanezt az SQL utasítással is létrehozható. A DB Browser a háttérben ilyet hajt végre:
CREATE TABLE belepesi_adatok (
id INTEGER PRIMARY KEY AUTOINCREMENT,
felhnev TEXT NOT NULL UNIQUE,
jelszo TEXT NOT NULL
);A jelszó nyílt szövegként csak gyakorlás
Ebben a tanfolyamban egyszerűség kedvéért a jelszót szövegként tároljuk. Valódi programban a jelszót soha nem tárolják nyíltan: tárolás előtt egyirányú kódolással (hash) alakítják át. Használj kitalált, teszt jelszót, és ne írj be soha igazi jelszót a gyakorló adatbázisba.
Az első SQL utasítások: INSERT és SELECT
Váltsd át a DB Browsert az Execute SQL lapra. Ide írhatsz SQL utasításokat, és a lap tetején lévő lejátszás gombbal (vagy a Ctrl+Enter billentyűvel) futtathatod őket. Az eredmény alul jelenik meg.
-- adatok felvétele
INSERT INTO belepesi_adatok (felhnev, jelszo) VALUES ('tanulo', 'teszt123');
INSERT INTO belepesi_adatok (felhnev, jelszo) VALUES ('kata', 'almafa');
INSERT INTO belepesi_adatok (felhnev, jelszo) VALUES ('bence', 'korte99');
-- minden sor és oszlop
SELECT * FROM belepesi_adatok;
-- csak két oszlop
SELECT felhnev, jelszo FROM belepesi_adatok;
-- szűrés: csak a keresett felhasználó
SELECT * FROM belepesi_adatok WHERE felhnev = 'kata';
-- rendezés ábécébe
SELECT * FROM belepesi_adatok ORDER BY felhnev;
-- darabszám
SELECT COUNT(*) FROM belepesi_adatok;id-t nem adjuk meg, mert az automatikus. A szöveget aposztróf (') közé tesszük.*) azt jelenti: minden oszlopot.DESC csökkenő sorrendet ad (például ORDER BY felhnev DESC).Jósolj!
A három INSERT után mit ad vissza a SELECT COUNT(*) FROM belepesi_adatok? Mi lesz a SELECT * FROM belepesi_adatok WHERE felhnev = 'peti' eredménye?
Jóslat ellenőrzése
A COUNT(*) eredménye 3. A „peti” nevű felhasználó nincs a táblában, ezért a második lekérdezés üres eredményt ad (nulla sor). Ez nem hiba. A bejelentkezés (3.3 lecke) pontosan erre épül: ha a lekérdezés üres, a felhasználó nem létezik.
Mit tegyél ide: az Execute SQL lap egy SELECT utasítással, a lejátszás gombbal, és alul az eredménytáblával (három felhasználó).Javasolt fájlnév: winforms-3-1-execute-sql.webp · Alt szöveg: Az Execute SQL lap egy SELECT lekérdezéssel és az eredménnyel
Írd ki a változtatásokat!
A DB Browser a módosításokat először csak átmenetileg tartja számon. Az adatbázis fájlba csak akkor kerülnek, ha a Write Changes (Változtatások írása) gombra kattintasz, vagy megnyomod a Ctrl+S billentyűt. Ha ezt kihagyod, és bezárod a programot, az új táblák és sorok elvesznek.
A leggyakoribb kezdő hiba
Beírod az adatokat, a lekérdezés mutatja is őket, majd bezárod a programot, és újranyitáskor üres a tábla. Ilyenkor kimaradt a Write Changes. Szokd meg: minden módosítás után Ctrl+S.
Hibakeresés: te vagy a hibadetektív
Mi a baj, és hogyan javítod?
Gondold végig az okot, és csak utána nyisd le a megoldást.
1. Eltűntek az adatok
Felvetted az adatokat, bezártad a programot, és újranyitáskor üres a tábla. Kimaradt a Write Changes (Ok és javítás
Ctrl+S). Vagy másik .db fájlt nyitottál meg. Minden módosítás után írd ki a változtatásokat, és ellenőrizd a megnyitott fájl nevét.
2. no such column
SELECT felhasznalonev FROM belepesi_adatok;
-- Error: no such column: felhasznalonevHiba és javítás
Az oszlop neve felhnev, nem felhasznalonev. Az SQL az oszlopneveket szigorúan nézi. Ellenőrizd a Database Structure lapon a tábla pontos oszlopneveit.
3. A tábla már létezik
CREATE TABLE belepesi_adatok (...);
-- Error: table belepesi_adatok already existsHiba és javítás
Ugyanazt a táblát másodszor próbálod létrehozni. Ha a táblát módosítani szeretnéd, használd a Database Structure lap Modify Table gombját, vagy törölj előbb a Drop Table paranccsal (de csak gyakorló adatbázisban!).
4. UNIQUE constraint failed
INSERT INTO belepesi_adatok (felhnev, jelszo) VALUES ('kata', 'masikjelszo');
-- Error: UNIQUE constraint failed: belepesi_adatok.felhnevHiba és javítás
Ez nem rossz működés, hanem a védelem: a felhnev oszlop egyedi (UNIQUE), és a „kata” név már szerepel. Ezzel az adatbázis megakadályozza, hogy két felhasználónak azonos neve legyen. A regisztrációnál (3.4 lecke) ezt a hibát fogjuk kezelni.
5. Hiányzó aposztróf
SELECT * FROM belepesi_adatok WHERE felhnev = kata;
-- Error: no such column: kataHiba és javítás
A szöveget aposztrófok közé kell tenni: WHERE felhnev = 'kata'. Nélkülük az SQL a „kata” szót oszlopnévnek hiszi. (A C# idézőjele ", az SQL szöveg határolója az aposztróf '.)
6. Kevesebb érték, mint oszlop
INSERT INTO belepesi_adatok (felhnev, jelszo) VALUES ('anna');
-- Error: 1 values for 2 columnsHiba és javítás
Az oszlopok száma (2) és az értékek száma (1) nem egyezik. Minden oszlophoz meg kell adni egy értéket: VALUES ('anna', 'titok').
Mini projekt: saját adatbázis két táblával
Készítsd el a következő tanfolyami részek adatbázisát:
- Hozd létre a
belepes.dbadatbázist abelepesi_adatoktáblával (id, felhnev, jelszo), az 3. szakasz szerint. Vegyél fel három próbafelhasználót. - Hozz létre egy második táblát a dolgozók adataival (
id,vnev,knev,fizetes,cim), és vegyél fel négy sort. Először próbáld meg önállóan.Megoldás megnyitása
SQLSQLiteCREATE TABLE adatok (
id INTEGER PRIMARY KEY AUTOINCREMENT,
vnev TEXT NOT NULL,
knev TEXT NOT NULL,
fizetes INTEGER,
cim TEXT
);
INSERT INTO adatok (vnev, knev, fizetes, cim) VALUES ('Kovács', 'Anna', 420000, 'Veszprém');
INSERT INTO adatok (vnev, knev, fizetes, cim) VALUES ('Nagy', 'Péter', 350000, 'Pécs');
INSERT INTO adatok (vnev, knev, fizetes, cim) VALUES ('Szabó', 'Kata', 510000, 'Győr');
INSERT INTO adatok (vnev, knev, fizetes, cim) VALUES ('Tóth', 'Bence', 290000, 'Veszprém'); - Írj lekérdezéseket: az összes sor, a veszprémi dolgozók, a fizetés szerint csökkenően rendezve.
- Írd ki a változtatásokat (
Ctrl+S), zárd be és nyisd meg újra a DB Browsert: megvannak-e az adatok?
Mit tegyél ide: a Database Structure lap a két táblával (belepesi_adatok és adatok), és a Browse Data lap az adatok tábla négy sorával.Javasolt fájlnév: winforms-3-1-ket-tabla.webp · Alt szöveg: A belepes.db két táblája a DB Browserben
Három önálló gyakorlófeladat
Egyszerre csak egyet csinálj: írd meg, futtasd, ellenőrizd az eredményt, és csak utána nyisd ki a megoldást.
1. Magas fizetések
Kérdezd le azokat a dolgozókat, akiknek a fizetése 400 000 forintnál több. Csak a vezeték- és keresztnevüket és a fizetésüket mutasd. A Egy lehetséges megoldás
SELECT vnev, knev, fizetes FROM adatok WHERE fizetes > 400000;>, <, = és <> (nem egyenlő) jelekkel számok között is szűrhetsz.
2. Átlagfizetés
Számold ki az átlagfizetést és a legnagyobb fizetést egy lekérdezéssel. Az Egy lehetséges megoldás
SELECT AVG(fizetes), MAX(fizetes) FROM adatok;AVG az átlag, a MAX a legnagyobb, a MIN a legkisebb érték, az SUM pedig az összeg. A COUNT-tal együtt ezek az összesítő függvények.
3. Keresés névrészletre
Keresd meg azokat a dolgozókat, akiknek a vezetékneve K betűvel kezdődik. A Egy lehetséges megoldás
SELECT * FROM adatok WHERE vnev LIKE 'K%';LIKE mintát illeszt. A % bármennyi karaktert jelent: a 'K%' a K-val kezdődő szavakat, a '%a' az a-ra végződőket, a '%at%' az „at” részletet tartalmazókat keresi.
Gyakorlótár: 6 további feladat
Három szinten gyakorolhatsz: alap, közepes és kihívás. A feladatok a DB Browser Execute SQL lapján oldhatók meg, C# kód nélkül. Használj új, gyakorló adatbázist (például gyakorlo.db). Mindegyik megoldás után írd ki a változtatásokat (Ctrl+S). Csak a próbálkozás után nyisd le a megoldást.
Alap szint
1. Tábla létrehozása
Hozz létre egy A tizedes számok típusa tanulok táblát: id (egész szám, elsődleges kulcs, automatikus), nev (szöveg, kötelező), osztaly (szöveg) és atlag (tizedes szám).Megoldás megnyitása
REAL. A NOT NULL kötelezővé teszi az oszlopot, a PRIMARY KEY AUTOINCREMENT automatikus azonosítót ad.CREATE TABLE tanulok (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nev TEXT NOT NULL,
osztaly TEXT,
atlag REAL
);
2. Adatok felvétele és lekérdezése
Vegyél fel négy tanulót különböző osztályokból és átlagokkal, majd kérdezd le az összes adatot. A szöveget aposztróf közé kell tenni, a tizedes számokat ponttal kell írni az SQL-ben (Megoldás megnyitása
4.5, nem 4,5).INSERT INTO tanulok (nev, osztaly, atlag) VALUES ('Kovács Anna', '10.A', 4.8);
INSERT INTO tanulok (nev, osztaly, atlag) VALUES ('Nagy Péter', '10.A', 3.9);
INSERT INTO tanulok (nev, osztaly, atlag) VALUES ('Szabó Kata', '10.B', 4.5);
INSERT INTO tanulok (nev, osztaly, atlag) VALUES ('Tóth Bence', '10.B', 3.2);
SELECT * FROM tanulok;
Közepes szint
3. Szűrés és rendezés
Kérdezd le azokat a tanulókat, akiknek az átlaga legalább 4,0, átlag szerint csökkenő sorrendben. Csak a nevet és az átlagot mutasd. A Megoldás megnyitása
WHERE a szűrést végzi (>=: legalább), az ORDER BY ... DESC csökkenő sorrendbe rendez. A kért oszlopokat a SELECT után soroljuk fel.SELECT nev, atlag
FROM tanulok
WHERE atlag >= 4.0
ORDER BY atlag DESC;
4. Összesítés
Számold ki egy lekérdezéssel a tanulók számát, az átlagok átlagát, a legjobb és a leggyengébb átlagot. Az összesítő függvények (Megoldás megnyitása
COUNT, AVG, MAX, MIN) egyetlen eredménysort adnak. Az AS nevet ad az oszlopnak, így az eredmény olvashatóbb.SELECT COUNT(*) AS darab,
AVG(atlag) AS atlagok_atlaga,
MAX(atlag) AS legjobb,
MIN(atlag) AS leggyengebb
FROM tanulok;
Kihívás szint
5. Csoportosítás osztályonként
Írd ki osztályonként a tanulók számát és az átlagok átlagát. A Megoldás megnyitása
GROUP BY csoportokba rendezi a sorokat az adott oszlop értéke szerint, az összesítő függvények pedig csoportonként számolnak.SELECT osztaly,
COUNT(*) AS letszam,
AVG(atlag) AS atlag
FROM tanulok
GROUP BY osztaly;
6. Három hibás utasítás
Keresd meg a hibát mindhárom utasításban, és javítsd őket: (a) Az osztály szöveg, ezért aposztróf közé kell tenni:
(a) INSERT INTO tanulok (nev, osztaly, atlag) VALUES ('Fekete Dóra', 10.A, 4.1);
(b) SELECT nev, FROM tanulok;
(c) SELECT * FROM tanulok WHERE atlag = '4,5';Megoldás megnyitása
'10.A'. Nélküle az SQL a 10.A szöveget nem tudja értelmezni. (b) A felsorolás végén felesleges vessző áll: SELECT nev FROM tanulok;. (c) A tizedes szám az SQL-ben ponttal íródik, és nem szöveg: WHERE atlag = 4.5. A vesszős, aposztrófos érték szöveget jelentene, amely nem egyezik a számmal.
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. Az SQLite adatbázis összes tábláját és adatát, egyetlen fájlban. A tábla egy téma adatainak gyűjteménye, az oszlop egy tulajdonság (például név), a sor egy konkrét elem összes adata. A A Szűri a sorokat: csak a feltételnek megfelelők kerülnek az eredménybe. A módosítások nem kerülnek a fájlba, és a program bezárása után elvesznek.1. Mit tárol egy .db fájl?
2. Mi a különbség a tábla, az oszlop és a sor között?
3. Mire való a PRIMARY KEY és a UNIQUE?
PRIMARY KEY minden sort egyedileg azonosít. A UNIQUE megakadályozza, hogy egy oszlopban két sor azonos értéket kapjon.4. Mi a különbség a SELECT és az INSERT között?
SELECT adatot kérdez le (nem módosít), az INSERT új sort vesz fel.5. Mit csinál a WHERE?
6. Mi történik, ha kihagyod a Write Changes lépést?
Mit tudsz már?
- Érted az adatbázis, a tábla, az oszlop és a sor fogalmát.
- Tudod, mi az SQLite, és hogyan használod a DB Browsert.
- Létrehozol táblát kulccsal és egyedi oszloppal.
- Használod az INSERT és a SELECT utasítást, a WHERE és az ORDER BY kulcsszóval.
- Nem felejted el a Write Changes lépést.
Következő lecke: DB.cs és adatbázis-kapcsolat
Az adatbázis kész. A következő leckében a C# program is kapcsolódik hozzá.




