Lekce 6 - Databáze v C# .NET - INSERT, UPDATE, DELETE a COUNT
V minulé lekci, SqlDataReader a připojená databáze v C# .NET, jsme se naučili číst data z databáze pomocí SqlDataReaderu. Také jsme se naučili používat parametrizované dotazy, které znemožňují útok SQL injection.
Dnes si v C# .NET tutoriálu zkusíme obsah databáze měnit.
Vkládání, mazání a editace hodnot
Základní databázové operace se často označují zkratkou CRUD. Jedná se o operace:
- Create (vytvořit),
- Read (číst),
- Update (aktualizovat),
- Delete (odstranit).
Minule jsme si ukázali operaci Read. Již víme, že data z databáze čteme
příkazem SELECT a potřebujeme k tomu
*DataReader.
INSERT
Vyzvěme uživatele k zadání slovíčka anglicky a česky. Nové slovíčko vložíme do databáze:
Console.WriteLine("Zadej nové slovíčko anglicky"); string anglicky = Console.ReadLine(); Console.WriteLine("Zadej nové slovíčko česky"); string cesky = Console.ReadLine(); string dotaz = "INSERT INTO Word (English, Czech) VALUES (@anglicky, @cesky)"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { spojeni.Open(); sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky); sqlDotaz.Parameters.AddWithValue("@cesky", cesky); int radku = sqlDotaz.ExecuteNonQuery(); Console.WriteLine(radku); }
SQL dotaz pro vložení nového řádku do tabulky začíná příkazem
INSERT INTO, následuje název tabulky. V závorkách vypíšeme
názvy sloupců, do kterých vkládáme hodnoty. Za klauzuli VALUES
vypíšeme opět do závorky hodnoty. Nemělo by vás překvapit, že použijeme
opět parametry.
Dotaz vložíme do instance třídy SqlCommand. Dodáme mu
potřebné parametry a spustíme ho metodou ExecuteNonQuery().
Metoda vrací počet ovlivněných řádků. Pro ověření, že vložení
proběhlo, si je vypišme do konzole:
Konzolová aplikace
Zadej nové slovíčko anglicky
keyboard
Zadej nové slovíčko česky
klávesnice
1
Metoda ExecuteNonQuery() vrátila hodnotu 1.
Můžeme spustit původní kód naší aplikace, který vypisoval všechna
slovíčka nebo nahlédnout do samotné databáze v designeru. Vidíme, že
klávesnice je nově mezi slovíčky:

DELETE
Přejděme k mazání záznamů. Oproti vkládání není v podstatě žádný rozdíl, jen jsem chtěl, abychom si pro úplnost ukázali všechny dotazy z CRUD:
Console.WriteLine("Zadej anglické slovíčko, které chceš vymazat"); string anglicky = Console.ReadLine(); string dotaz = "DELETE FROM Word WHERE English=@anglicky"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { spojeni.Open(); sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky); int radku = sqlDotaz.ExecuteNonQuery(); Console.WriteLine(radku); }
C# kód se vůbec nezměnil. SQL dotaz začíná DELETE FROM a
pokračuje názvem tabulky. Následuje podmínka WHERE, kterou již
dobře známe.
Nikdy na podmínku v příkazu DELETE
nezapomeňte, jinak dojte k vymazání všech záznamů v tabulce!
Aplikaci opět vyzkoušejme:
Konzolová aplikace
Zadej anglické slovíčko, které chceš vymazat
keyboard
1
Zkontrolujte si, že klávesnice mezi slovíčky již opravdu není. Můžeme
zkusit i zadat neexistující slovíčko k vymazání, počet ovlivněných
řádků bude 0:
Konzolová aplikace
Zadej anglické slovíčko, které chceš vymazat
binary tree
0
UPDATE
Naši čtveřici dotazů zakončeme příkazem UPDATE, který
vyvolá změnu. Naučme aplikaci měnit český překlad nějakého anglického
slova:
Console.WriteLine("Zadej anglické slovíčko, u kterého chceš upravit překlad"); string anglicky = Console.ReadLine(); Console.WriteLine("Zadej nový překlad"); string cesky = Console.ReadLine(); string dotaz = "UPDATE Word SET Czech=@cesky WHERE English=@anglicky"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { spojeni.Open(); sqlDotaz.Parameters.AddWithValue("@anglicky", anglicky); sqlDotaz.Parameters.AddWithValue("@cesky", cesky); int radku = sqlDotaz.ExecuteNonQuery(); Console.WriteLine(radku); }
C# kód je opět nezměněný (pouze jsme přidali parametr). SQL dotaz
začíná UPDATE, následuje název tabulky a dále klauzule
SET. Po ní název sloupce, rovnítko a nová hodnota. Pokud bychom
potřebovali updatovat více sloupců, zapíšeme to např. takto:
UPDATE Word SET Czech=@cesky, English=@anglicky WHERE Id=@id
Stejně jako u DELETE nikdy nesmíme
zapomenout na klauzuli WHERE, jinak se updatují všechny
řádky v tabulce.
Aplikaci opět vyzkoušejme:
Konzolová aplikace
Zadej anglické slovíčko, u kterého chceš upravit překlad
dog
Zadej nový překlad
stopovat
1
Zkontrolujte si, že se překlad změnil.
Hranaté závorky
Ještě jsme nezmínili použití hranatých závorek v dotazech. Pokud
název nějakého sloupce koliduje s klíčovým slovem z SQL (např. se sloupec
jmenuje Where), dáme ho do hranatých závorek. Často se setkáte
s konvencí, kde se takto označují všechny názvy:
UPDATE [Word] SET [Czech]=@cesky, [English]=@anglicky WHERE [Id]=@id
Závěr
Výhodou připojeného přístupu k databázi je aktuálnost zpracovávaných
dat i ve víceuživatelských aplikacích. Nevýhodou naopak může být časté
připojování ke vzdálené databázi, větší objem přenesených dat i
sekvenční čtení komponenty *DataReader, tedy například bez
možnosti přechodu na předcházející záznam.
To je pro tento článek vše, v dalším se seznámíte s vkládáním, editováním a odstraňováním dat v připojených databázových aplikacích. Dnešní projekt je se zdrojovými kódy jako vždy v příloze.
V následujícím cvičení, Řešené úlohy k 1.-6. lekci Databáze v C# - ADO.NET, si procvičíme nabyté zkušenosti z předchozích lekcí.
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 613x (1.02 MB)
Aplikace je včetně zdrojových kódů v jazyce C#

David se informační technologie naučil na