Lekce 2 - Vytvoření lokální databáze ve Visual Studio
V minulé lekci, Úvod do databází v C# .NET, jsme si udělali úvod do relačních databází a nainstalovali si Microsoft SQL Server.
Dnes si v C# .NET tutoriálu vytvoříme databázi, se kterou budeme po zbytek kurzu komunikovat.
Vytvoření databáze
Způsobů, jak lokální databázi vytvořit, je mnoho. Jako nástroj můžeme používat buď SQL Server Management Studio, nebo přímo Visual Studio. Jako jednodušší způsob je určitě vytvořit databázi přímo ve Visual Studiu, proto zvolíme ten. Pokud chcete používat Management Studio, můžete využít článek Vytvoření databáze v MS SQL Management Studio.
Ve Visual Studiu si založíme nový projekt, konzolovou aplikaci, kterou
pojmenujeme SlovickaSQL
.
Přidání lokální databáze
Ve Visual Studiu lze lokální databázi vytvořit a pracovat s ní více způsoby. Tyto způsoby se liší i podle použité implementace .NET.
Přidání databáze přes SQL Server Object Explorer
Nejprve si ukážeme způsob, který funguje jak v .NET Framework,
tak i v novějším .NET Core. Tento způsob je zároveň i
nejjednodušší. Otevřeme si tedy okno "SQL Server Object Explorer" (menu View
-> SQL Server Object Explorer), kde můžeme vidět stromovou strukturu
lokálního serveru, a rozbalíme položku SQL Server ->
(localdb)\MSSQLLocalDB
-> Databases. Na Databases
klikneme pravým tlačítkem a zvolíme "Add New Database":
V zobrazeném okně zvolíme název SlovnicekDB
, naše
testovací aplikace bude totiž jednoduchý slovníček, a cestu kam chceme
databázi umístit. Můžeme nechat výchozí cestu ve složce
\AppData\
, anebo vybrat vlastní, např. složku našeho projektu.
Nakonec přidání potvrdíme:
Databáze se nám automaticky připojila k projektu a můžeme s ní ve Visual Studiu rovnou pracovat. Tento způsob je vhodný v případě, kdy chceme tuto databázi používat jen při vývoji a testování aplikace.
Přidání databáze přes Solution Explorer
Dále si můžeme lokální databázi přidat kliknutím pravým tlačítkem
na projekt v Solution Explorer a zvolením Add -> New Item. Pokud se vám ji
již povedlo přidat předchozím způsobem, tak tento způsob již nemusíte
zkoušet. V nově otevřeném okně si najdeme položku "Service-based Database"
a pojmenujeme ji zas SlovnicekDB
. Přidání potvrdíme tlačítkem
"Add":
Připojení k databázi
Abychom však mohli s databází ve Visual Studiu pracovat, tak ji musíme nejdříve připojit k našemu projektu. Zde opět existuje více způsobů.
Připojení existující databáze přes Server Explorer
Univerzální způsob připojení jakékoliv databáze (nejen lokální), který funguje pro všechny implementace .NET, je použít "Server Explorer". Otevřeme si jej (menu View -> Server Explorer):
V případě, že jste si přidali databázi pomocí způsobu uvedeného výše, tak pod položkou "Data Connections" můžete vidět naši databázi již připojenou. My si však ukážeme jak databázi připojit ručně. Proto si toto připojení vymažeme, klikneme na něj pravým tlačítkem a zvolíme "Delete".
Pro připojení databáze musíme kliknout na tlačítko "Connect to Database". Otevře se následující okno, kde jako zdroj dat (Data source) zvolíme Microsoft SQL Server (SqlClient):
Jako název serveru nastavíme (localdb)\MSSQLLocalDB
.
Autentifikaci ponecháme výchozí a jelikož máme soubor databáze již
vytvořen, zaškrtneme "Attach a database file". Vybereme soubor naší
databáze, zadáme jméno a přidání potvrdíme:
Pod položkou "Advanced…" můžete definovat další vlastnosti.
Připojení existující databáze přes Data Sources
.NET Framework umožňuje připojit databázi ještě pomocí tzv. Data Sources. Více o Data Sources se můžete dočíst např. v oficiální dokumentaci. Postup opět nemusíte opakovat, pokud se vám již povedl ten výše. V okně "Data Sources" (menu View -> Other Windows -> Data Sources) klikneme na "Add New Data Source":
Otevře se nám nové okno pro vybrání zdroje dat. Vybereme "Database" a potvrdíme "Next":
Na následující stránce necháme vybraný "Dataset" a opět potvrdíme
"Next". Zobrazí se nám stránka pro výběr datového připojení. Vybereme
naši databázi SlovickaDB
:
Po potvrzení tlačítkem "Next" se nám zobrazí stránka s dotazem, jestli chceme uložit tzv. ConnectionString, který budeme později používat pro připojení k databázi, do nastavení našeho projektu. Zaškrtneme, že chceme, název ponecháme výchozí a opět potvrdíme tlačítkem "Next":
Na poslední stránce ponecháme název DataSet
na
SlovickaDBDataSet
a klikneme na "Finish", čímž dokončíme
připojení:
Tento způsob je použit ve zdrojovém kódu dole pod článkem.
Vytvoření tabulky
Stromovou strukturu lokálního serveru, na kterém je databáze, si můžeme
zobrazit buďto přes okno "Server Explorer", anebo přes okno "SQL Server
Object Explorer". My si otevřeme "SQL Server Object Explorer", jelikož je
přímo určený pro práci s SQL databází. Rozbalíme položku SQL Server
-> (localdb)\MSSQLLocalDB
-> Databases. V této složce
bychom měli vidět naši databázi, rozbalíme ji a stejně tak její položku
"Tables", kde máme zatím jen systémové tabulky.
O tabulkách již byla řeč minule. Víme, že takto se data do relační databáze ukládají. Do naší databáze budeme chtít ukládat slovíčka. Nejprve musíme vytvořit novou tabulku, kde definujeme sloupce, tedy vlastnosti, jaké slovíčko má. Na položku "Tables" klikneme pravým tlačítkem a zvolíme možnost "Add New Table":
Visual Studio otevře designer tabulky. Tento designer má okno rozdělené na tři části. V horní polovině máme sloupce naší tabulky s jejich datovými typy a dalšími důležitými vlastnostmi. Dole je výsledný T-SQL kód, který se spustí a databázi založí, až to budeme chtít.
Jak již bylo nastíněno, každá položka v databázi (tedy řádek v
tabulce) by měla mít unikátní identifikátor (sloupec, ve kterém je pro
každý řádek hodnota jedinečná). K tomuto účelu slouží tzv.
primární klíč. Je to obyčejný sloupec, který se
nejčastěji pojmenuje jednoduše Id
a bude typu int
.
Názvy sloupců budeme psát s velkým počátečním písmenem.
Ačkoli doteď jsme se snažili psát ukázkové aplikace v češtině, databázi si navrhneme v angličtině. To proto, že ke konci kurzu budeme používat technologie, které skloňují názvy tabulek a umí samozřejmě jen anglicky.
Dále přidáme další 2 sloupce: Czech
a English
.
Jedná se o znění slovíčka v češtině a v angličtině. Sloupce budou typu
nvarchar(50)
. Jedná se o řetězec znaků, kde 50
je
maximální počet znaků. Neplést s typem nchar
, kde se nejedná
o maximální velikost, ale text je vždy dlouhý 50
znaků. Ještě existují typy char
a varchar
(bez n
), ty nepodporují kódování Unicode a proto je nebudeme
používat. Pro krátký text budeme tedy vždy používat typ
nvarchar
. Nakonec přidáme poslední sloupec
Difficulty
, značící obtížnost slovíčka. Bude typu
int
.
Pokud vás napadla podobnost databázové tabulky a třídy v jazyce C#, tak
máte pravdu. Definice tabulky je téměř totožná s definicí třídy,
jednoduše navolíme atributy, co daná entita má. Řádky zapsané v tabulce
poté můžeme chápat jako jednotlivé instance třídy. Tvoříme tedy jakoby
třídu Word
(slovíčko), která má vlastnosti Id
,
Czech
(české znění) a English
(anglické znění).
Takto budeme ve výsledku s databází i pracovat, ale nepředbíhejme. Vraťme
se ještě ke sloupci Id
, klikneme na něj pravým tlačítkem a
vyberme Properties
. V okně Properties
nastavme
možnost Is Identity na True
(je třeba rozbalit
Identity Specification):
Tím jsme určili, že sloupec Id
je vždy unikátní. Visual
Studio nám samo nastavilo i hodnoty Identity Increment a Identity Seed na
1
. To znamená, že první slovíčko v tabulce bude mít hodnotu
Id
1
, druhé 2
atd. Databáze přiřadí
automaticky každému nově vloženému slovíčku o 1
vyšší
Id
, o unikátnost se nám tedy stará sama.
Id
rostou stále, i když nějaké slovíčko
vymažeme a Id
se tedy uvolní, již nebude použito. Je to z toho
důvodu, že recyklace starých Id
může způsobit problémy.
Jestliže tento sloupec ještě nemáme nastavený jako primární klíč pro naši novou tabulku, tak klikneme pravým tlačítkem na název sloupce a zvolíme možnost "Set Primary Key":
Každá tabulka by měla mít primární klíč, jinak nebudeme schopni jednoznačně určit konkrétní záznam a některé technologie (např. Entity Framework) by s tabulkou mohly mít problém pracovat.
Nakonec si tabulku přejmenujeme na Word
(jako slovíčko). Toho
docílíme tak, že v T-SQL kódu přepíšeme na konci prvního řádku
aktuální název (Table
) v hranatých závorkách. Tabulky
pojmenováváme opět velkým písmenem a v jednotném čísle, jako by to byla
třída:
Po přejmenování klikneme na tlačítko "Update". V okně, které se nám otevře, klikneme na "Update Database" pro uložení změn.
Databázi máme tímto založenou. Vytvořme si ještě nějaká testovací data, aby nebyla prázdná. Na tabulku klikneme pravým tlačítkem a zvolíme "View Data":
Nyní jen vložíme několik slovíček. Id
se vyplňuje samo,
stačí tedy zadat českou a anglickou variantu a obtížnost. Já jsem si jich
přidal jen několik, vy si jich klidně naklikejte více s různými
obtížnostmi, ať máte co nejvíce dat na zkoušení:
Rozšíření
Pokud vás tvorba databáze příliš neodrovnala (což by neměla ), můžete si do ní přidat ještě druhou tabulku. Díky tomu si budeme moci dále ukázat i pokročilejší dotazy přes více tabulek. Pokud chcete začít raději jednoduše, můžete tento krok přeskočit stejně jako pár dále ukázaných dotazů.
Přidejte si stejným způsobem tabulku Category
, která bude
reprezentovat kategorii slovíček. Opět jí dáme sloupec Id
,
kterému nastavíme Identity na True
a poté ho učiníme
primárním klíčem. Co se týče dalších sloupců, bude zde pouze jeden,
opět typu nvarchar(50)
a s názvem Title
. To bude
titulek kategorie (např. "Počítače"
, "Zvířata"
nebo "Ostatní"
). Tabulku uložíme jako Category
:
Opět vytvoříme testovací data:
Nyní přidáme slovíčku vazbu na kategorii, které se někdy říká cizí
klíč nebo relace. Vraťme se k naší tabulce Word
a přidejme ji
ještě jeden sloupec s názvem CategoryId
. Bude typu
int
. V Properties mu nastavíme "Default Value or Binding" na
1
. To je výchozí hodnota. Dále v pravém sloupci designeru
klikneme pravým tlačítkem na položku "Foreign Keys", zvolíme "Add New
Foreign Key" a pojmenujme ho třeba "FK_Word_Category":
Tento cizí klíč (vazba) se nám vygeneroval i v T-SQL kódu:
Zde nastavíme, že se tabulka Word
pomocí sloupce
CategoryId
připojí na primární klíč tabulky
Category
, kterým je Id
:
Nyní databáze ví, že pokud je např. u slovíčka ve sloupci
CategoryId
hodnota 1
, váže se k první kategorii.
Vše uložíme tlačítkem "Update". Znovu editujte záznamy v tabulce
Word
a slovíčkům nastavte kategorii:
Číslo je samozřejmě primární klíč do tabulky Category
,
1
tedy odpovídá záznamu "Počítače"
,
2
"Zvířata"
a 3
"Ostatní"
.
V příští lekci, Přístupy pro práci s relačními databázemi v .NET, si představíme přístupy, pomocí kterých s databází můžeme z C# .NET komunikovat.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 159x (519.5 kB)
Aplikace je včetně zdrojových kódů v jazyce C#