Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Přidání LocalDB přes SQL Server Object Explorer - Databáze v C# - ADO.NET

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 v C# - ADO.NET

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

Databáze v C# - ADO.NET

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

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

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

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

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:

Přidání LocalDB na server MSSQLLocalDB - Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

Otevře se nám nové okno pro vybrání zdroje dat. Vybereme "Database" a potvrdíme "Next":

Databáze v C# - ADO.NET

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:

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

Na poslední stránce ponecháme název DataSet na SlovickaDBDataSet a klikneme na "Finish", čímž dokončíme připojení:

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

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:

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

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:

Databáze v C# - ADO.NET

Opět vytvoříme testovací data:

Databáze v C# - ADO.NET

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

Databáze v C# - ADO.NET

Tento cizí klíč (vazba) se nám vygeneroval i v T-SQL kódu:

Databáze v C# - ADO.NET

Zde nastavíme, že se tabulka Word pomocí sloupce CategoryId připojí na primární klíč tabulky Category, kterým je Id:

Databáze v C# - ADO.NET

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:

Databáze v C# - ADO.NET

Čí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 150x (519.5 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Předchozí článek
Úvod do databází v C# .NET
Všechny články v sekci
Databáze v C# - ADO.NET
Přeskočit článek
(nedoporučujeme)
Přístupy pro práci s relačními databázemi v .NET
Článek pro vás napsal Radek Vymětalík
Avatar
Uživatelské hodnocení:
142 hlasů
...
Aktivity