IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 C# .NET tutoriáli vytvoríme databázu, s ktorou budeme po zvyšok kurzu komunikovať.

Vytvorenie databázy

Spôsobov, ako lokálnu databázu vytvoriť, je mnoho. Ako nástroj môžeme používať buď SQL Server Management Studio, alebo priamo Visual Studio. Ako 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 založí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 Databases klikneme pravým tlačidlom a zvolíme "Add New Database":

Pridanie LocalDB cez SQL Server Object Explorer - Databázy v C# - ADO.NET

V zobrazenom okne zvolíme názov DictionaryDB, naša testovacia aplikácia bude totiž jednoduchý slovníček, a cestu 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:

create database - Databázy v C# - ADO.NET

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. Pokiaľ 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":

new item - Databázy v C# - ADO.NET

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):

Server Explorer - Databázy v C# - ADO.NET

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):

Connect to Database v Server Explorer - Databázy v C# - ADO.NET

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:

Pridanie LocalDB na server MSSQLLocalDB - Databázy v C# - ADO.NET

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 môžete dočítať napr. v oficiálnej dokumentácii. Postup opäť nemusíte opakovať, pokiaľ sa vám už podaril ten vyššie. V okne "Data Sources" (menu View -> Other Windows -> Data Sources) klikneme na "Add New Data Source":

data sources - Databázy v C# - ADO.NET

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

data source type - Databázy v C# - ADO.NET

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:

data connection - Databázy v C# - ADO.NET

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":

save the connection - Databázy v C# - ADO.NET

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

finish - Databázy v C# - ADO.NET

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":

new table - Databázy v C# - ADO.NET

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 založí, až 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 počiatočným písmenom.

Hoci sme sa doteraz snažili písať ukážkové aplikácie v anličtine, databázu si navrhneme v španielčine. To preto, že ku koncu kurzu budeme používať technológie, ktoré skloňujú názvy tabuliek a vedia samozrejme len anglicky.

Ďalej pridáme ďalšie 2 stĺpce: English a Spanish. Ide o znenie slovíčka v španielčine av angličtine. Stĺpce budú typu nvarchar(50). Ide o reťazec znakov, kde 50 je 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.

Pokiaľ 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, English (anglické znenie) a Spanish (španielske 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):

table properties - Databázy v C# - ADO.NET

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":

set primary key - Databázy v C# - ADO.NET

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 av jednotnom čísle, ako by to bola trieda:

rename table - Databázy v C# - ADO.NET

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 založenú. 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":

view table data - Databázy v C# - ADO.NET

Teraz iba vložíme niekoľko slovíčok. Id sa vypĺňa samo, stačí teda zadať anglický a španělský 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:

table data - Databázy v C# - ADO.NET

Rozšírenie

Pokiaľ 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 otázky cez viacero tabuliek. Pokiaľ chcete začať radšej jednoducho, môžete tento krok preskočiť rovnako ako pár ďalej ukázaných otázok.

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) as názvom Title. To bude titulok kategórie (napr. "Computers", "Animals" alebo "Other"). Tabuľku uložíme ako Category:

new table category - Databázy v C# - ADO.NET

Opäť vytvoríme testovacie dáta:

category data - Databázy v C# - ADO.NET

Teraz pridáme slovíčku väzbu na kategóriu, ktoré sa niekedy hovorí cudzí kľúč alebo relácia. Vráťme sa k našej tabuľke Word a pridajme ju 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":

add new foreign key - Databázy v C# - ADO.NET

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

foreign key - Databázy v C# - ADO.NET

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

foreign key 2 - Databázy v C# - ADO.NET

Teraz databáza vie, že pokiaľ 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:

Word table data - Databázy v C# - ADO.NET

Číslo je samozrejme primárny kľúč do tabuľky Category, 1 teda zodpovedá záznamu "Computers", 2 "Animals" a 3 "Other".

V budú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é 6x (596.61 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Predchádzajúci článok
Úvod do databáz v C# .NET
Všetky články v sekcii
Databázy v C# - ADO.NET
Preskočiť článok
(neodporúčame)
Prístupy pre prácu s relačnými databázami v .NET
Článok pre vás napísal Radek Vymětalík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
...
Aktivity