2. diel - Vytvorenie lokálnej databázy vo Visual Studio
V minulej lekcii, Úvod do databáz v C# .NET, sme si urobili úvod do relačných databáz a nainštalovali si Microsoft SQL Server.
Dnes si v lekcii C# .NET vytvoríme databázu, s ktorou budeme v zvyšnej časti kurzu komunikovať.
Vytvorenie databázy
Spôsobov, ako vytvoriť lokálnu databázu, je mnoho. Ako nástroj môžeme používať buď SQL Server Management Studio, alebo priamo Visual Studio. Jednoduchší spôsob je určite vytvoriť databázu priamo vo Visual Studiu, preto zvolíme ten. Ak chcete používať Management Studio, môžete využiť článok Vytvorenie databázy v MS-SQL Management Studio.
Vo Visual Studiu si vytvoríme nový projekt, konzolovú aplikáciu, ktorú
pomenujeme DictionarySQL.
Pridanie lokálnej databázy
Vo Visual Studiu je možné lokálnu databázu vytvoriť a pracovať s ňou viacerými spôsobmi. Tieto spôsoby sa líšia aj podľa použitej implementácie .NET.
Pridanie databázy cez SQL Server Object Explorer
Najprv si ukážeme spôsob, ktorý funguje ako v .NET Framework, tak
aj v novšom .NET Core. Tento spôsob je zároveň aj najjednoduchší.
Otvoríme si teda okno SQL Server Object Explorer (menu View
-> SQL Server Object Explorer), kde môžeme vidieť stromovú
štruktúru lokálneho servera a rozbalíme položku SQL Server ->
(LocalDB)\MSSQLLocalDB -> Databases/. Na prečinok
Databases/ klikneme pravým tlačidlom a zvolíme Add New
Database:

V zobrazenom okne zvolíme názov DictionaryDB, naša testovacia
aplikácia bude totiž jednoduchý slovníček, a cesta kam chceme databázu
umiestniť. Môžeme nechať predvolenú cestu v zložke \AppData\,
alebo vybrať vlastnú, napr. zložku nášho projektu. Nakoniec pridanie
potvrdíme:

Databáza sa nám automaticky pripojila k projektu a môžeme s ňou vo Visual Studiu rovno pracovať. Tento spôsob je vhodný v prípade, keď chceme túto databázu používať iba pri vývoji a testovaní aplikácie.
Pridanie databázy cez Solution Explorer
Ďalej si môžeme lokálnu databázu pridať kliknutím pravým tlačidlom
na projekt v Solution Explorer a zvolením Add -> New Item.
Ak sa vám ju už podarilo pridať predchádzajúcim spôsobom, tak tento
spôsob už nemusíte skúšať. V novootvorenom okne si nájdeme položku
Service-based Database a pomenujeme ju zas DictionaryDB.
Pridanie potvrdíme tlačidlom Add:

Pripojenie k databáze
Aby sme však mohli s databázou vo Visual Studiu pracovať, tak ju musíme najskôr pripojiť k nášmu projektu. Tu opäť existuje viacero spôsobov.
Pripojenie existujúcej databázy cez Server Explorer
Univerzálny spôsob pripojenia akejkoľvek databázy (nielen lokálnej), ktorý funguje pre všetky implementácie .NET, je použiť Server Explorer. Otvoríme si ho (menu View -> Server Explorer):

V prípade, že ste si pridali databázu pomocou spôsobu uvedeného vyššie, tak pod položkou Data Connections môžete vidieť našu databázu už pripojenú. My si však ukážeme, ako databázu pripojiť ručne. Preto si toto pripojenie vymažeme, klikneme naň pravým tlačidlom a zvolíme Delete.
Pre pripojenie databázy musíme kliknúť na tlačidlo Connect to Database. Otvorí sa nasledujúce okno, kde ako zdroj dát (Data source) zvolíme Microsoft SQL Server (SqlClient):

Ako názov servera nastavíme (localdb)\MSSQLLocalDB.
Autentifikáciu ponecháme predvolenú a keďže máme súbor databázy už
vytvorený, zaškrtneme Attach a database file. Vyberieme súbor našej
databázy, zadáme meno a pridanie potvrdíme:

Pod položkou Advanced… môžete definovať ďalšie vlastnosti.
Pripojenie existujúcej databázy cez Data Sources
.NET Framework umožňuje pripojiť databázu ešte pomocou tzv. Data Sources. Viac o Data Sources sa dočítate napr. v oficiálnej dokumentácii. Postup opäť nemusíte opakovať, ak sa vám už podaril ten vyššie. V okne Data Sources (menu View -> Other Windows -> Data Sources) klikneme na Add New Data Source:

Otvorí sa nám nové okno na vybranie zdroja dát. Vyberieme Database a potvrdíme Next:

Na nasledujúcej stránke necháme vybraný Dataset a opäť
potvrdíme Next. Zobrazí sa nám stránka pre výber dátového
pripojenia. Vyberieme našu databázu DictionaryDB:

Po potvrdení tlačidlom Next sa nám zobrazí stránka s otázkou, či chceme uložiť tzv. ConnectionString, ktorý budeme neskôr používať na pripojenie k databáze, do nastavenia nášho projektu. Zaškrtneme, že chceme, názov ponecháme východiskový a opäť potvrdíme tlačidlom Next:

Na poslednej stránke ponecháme názov DataSet na
DictionaryDBDataSet a klikneme na Finish, čím
dokončíme pripojenie:

Tento spôsob je použitý v zdrojovom kóde dole pod článkom.
Vytvorenie tabuľky
Stromovú štruktúru lokálneho servera, na ktorom je databáza, si môžeme
zobraziť buď cez okno Server Explorer, alebo cez okno SQL Server
Object Explorer. My si otvoríme SQL Server Object Explorer,
pretože je priamo určený na prácu s SQL databázou. Rozbalíme položku
SQL Server -> (LocalDB)\MSSQLLocalDB ->
Databases/. V tejto zložke by sme mali vidieť našu databázu,
rozbalíme ju a rovnako tak jej položku Tables, kde máme zatiaľ len
systémové tabuľky.
O tabuľkách už bola reč minule. Vieme, že takto sa dáta do relačnej databázy ukladajú. Do našej databázy budeme chcieť ukladať slovíčka. Najprv musíme vytvoriť novú tabuľku, kde definujeme stĺpce, teda vlastnosti, aké slovíčko má. Na položku Tables klikneme pravým tlačidlom a zvolíme možnosť Add New Table:

Visual Studio otvorí designer tabuľky. Tento designer má okno rozdelené na tri časti. V hornej polovici máme stĺpce našej tabuľky s ich dátovými typmi a ďalšími dôležitými vlastnosťami. Dole je výsledný T-SQL kód, ktorý sa spustí a databázu vytvorí, keď to budeme chcieť.
Ako už bolo načrtnuté, každá položka v databáze (teda riadok v
tabuľke) by mala mať unikátny identifikátor (stĺpec, v ktorom je pre
každý riadok hodnota jedinečná). Na tento účel slúži tzv.
primárny kľúč. Je to obyčajný stĺpec, ktorý sa
najčastejšie pomenuje jednoducho Id a bude typu int.
Názvy stĺpcov budeme písať s veľkým začiatočným písmenom.
Do tabuľky pridáme 2 stĺpce: Slovak a English.
Ide o znenie slovíčka v slovenčine a v angličtine. Stĺpce budú typu
nvarchar(50). Ide o reťazec znakov, kde je 50
maximálny počet znakov. Nepliesť s typom nchar, kde sa nejedná
o maximálnu veľkosť, ale text je vždy dlhý 50
znakov. Ešte existujú typy char a varchar
(bez n), tie nepodporujú kódovanie Unicode a preto ich nebudeme
používať. Pre krátky text budeme teda vždy používať typ
nvarchar. Nakoniec pridáme posledný stĺpec
Difficulty, značiaci obtiažnosť slovíčka. Bude typu
int.
Ak vás napadla podobnosť databázovej tabuľky a triedy v jazyku C#, tak
máte pravdu. Definícia tabuľky je takmer totožná s definíciou triedy,
jednoducho navolíme atribúty, čo daná entita má. Riadky zapísané v
tabuľke potom môžeme chápať ako jednotlivé inštancie triedy. Tvoríme
teda akoby triedu Word (slovíčko), ktorá má vlastnosti
Id, Slovak (slovenské znenie) a English
(anglické znenie). Takto budeme vo výsledku s databázou aj pracovať, ale
nepredbiehajme. Vráťme sa ešte k stĺpcu Id, klikneme naň
pravým tlačidlom a vyberme Properties. V okne Properties
nastavme možnosť Is Identity na True (je potrebné
rozbaliť Identity Specification):

Tým sme určili, že stĺpec Id je vždy unikátny. Visual
Studio nám samo nastavilo aj hodnoty Identity Increment a Identity Seed na
1. To znamená, že prvé slovíčko v tabuľke bude mať hodnotu
Id 1, druhé 2 atď. Databáza priradí
automaticky každému novo vloženému slovíčku o 1 vyššiu
Id, o unikátnosť sa nám teda stará sama.
Id rastú stále, aj keď nejaké slovíčko
vymažeme a Id sa teda uvoľní, už nebude použité. Je to z toho
dôvodu, že recyklácia starých Id môže spôsobiť
problémy.
Ak tento stĺpec ešte nemáme nastavený ako primárny kľúč pre našu novú tabuľku, tak klikneme pravým tlačidlom na názov stĺpca a zvolíme možnosť Set Primary Key:

Každá tabuľka by mala mať primárny kľúč, inak nebudeme schopní jednoznačne určiť konkrétny záznam a niektoré technológie (napr. Entity Framework) by s tabuľkou mohli mať problém pracovať.
Nakoniec si tabuľku premenujeme na Word (ako slovíčko). To
docielime tak, že v T-SQL kóde prepíšeme na konci prvého riadku aktuálny
názov (Table) v hranatých zátvorkách. Tabuľky pomenovávame
opäť veľkým písmenom a v jednotnom čísle, ako keby to bola trieda:

Po premenovaní klikneme na tlačidlo Update. V okne, ktoré sa nám otvorí, klikneme na Update Database na uloženie zmien.
Databázu máme týmto vytvorenú. Vytvorme si ešte nejaké testovacie dáta, aby neboli prázdne. Na tabuľku klikneme pravým tlačidlom a zvolíme View Data:

Teraz iba vložíme niekoľko slovíčok. Id sa vypĺňa samo,
stačí teda zadať slovenský a anglický variant a obtiažnosť. Ja som si ich
pridal len niekoľko, vy si ich pokojne naklikajte viac s rôznymi
obtiažnosťami, nech máte čo najviac dát na skúšanie:

Rozšírenie
Ak vás tvorba databázy príliš neodrovnala (čo by nemala
), môžete si do nej pridať ešte
druhú tabuľku. Vďaka tomu si budeme môcť ďalej ukázať aj pokročilejšie
dopyty cez viacero tabuliek. Ak chcete začať radšej jednoducho, môžete
tento krok preskočiť rovnako ako pár ďalej ukázaných dopytov.
Pridajte si rovnakým spôsobom tabuľku Category, ktorá bude
reprezentovať kategóriu slovíčok. Opäť jej dáme stĺpec Id,
ktorému nastavíme Identity na True a potom ho urobíme primárnym
kľúčom. Čo sa týka ďalších stĺpcov, bude tu iba jeden, opäť typu
nvarchar(50) a s názvom Title. To bude titulok
kategórie (napr. "Computers", "Animals" alebo
"Other"). Tabuľku uložíme ako Category:

Opäť vytvoríme testovacie dáta:

Teraz pridáme slovíčku väzbu na kategóriu, ktorej sa niekedy hovorí
cudzí kľúč alebo relácia. Vráťme sa k našej tabuľke Word a
pridajme jej ešte jeden stĺpec s názvom CategoryId. Bude typu
int. V Properties mu nastavíme Default Value or
Binding na 1. To je predvolená hodnota. Ďalej v pravom
stĺpci designera klikneme pravým tlačidlom na položku Foreign Keys,
zvolíme Add New Foreign Key a pomenujme ho napríklad
FK_Word_Category:

Tento cudzí kľúč (väzba) sa nám vygeneroval aj v T-SQL kóde:

Tu nastavíme, že sa tabuľka Word pomocou stĺpca
CategoryId pripojí na primárny kľúč tabuľky
Category, ktorým je Id:

Teraz databáza vie, že ak je napr. pri slovíčku v stĺpci
CategoryId hodnota 1, viaže sa k prvej kategórii.
Všetko uložíme tlačidlom Update. Znovu editujte záznamy v tabuľke
Word a slovíčkam nastavte kategóriu:

Číslo je samozrejme primárny kľúč do tabuľky Category,
1 teda zodpovedá záznamu "Computers", 2
"Animals" a 3 "Other".
V nasledujúcej lekcii, Prístupy pre prácu s relačnými databázami v .NET, si predstavíme prístupy, pomocou ktorých s databázou môžeme z C# .NET komunikovať.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 9x (597.09 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#
