Lekce 6 - Databáze v C# .NET - INSERT, UPDATE, DELETE a COUNT

Vydávání, hosting a aktualizace umožňují jeho sponzoři.
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)) { 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.

ExecuteNonQuery()
vrátila hodnotu 1
. Můžeme
spustit původní kód naší aplikace, který vypisoval všechna slovíčka
nebo nahlédnout do Microsoft SQL Management Studia. 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 [email protected]"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { 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:

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
.

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 [email protected] WHERE [email protected]"; using (SqlCommand sqlDotaz = new SqlCommand(dotaz, spojeni)) { 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 [email protected], [email protected] WHERE [email protected]
Stejně jako u DELETE
nikdy nesmíme zapomenout na
klauzuli WHERE
, jinak se updatují všechny řádky v
tabulce.
Aplikaci opět vyzkoušejme:

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 setáte
s konvencí, kde se takto označují všechny názvy:
UPDATE [Word] SET [Czech][email protected], [English][email protected] WHERE [Id][email protected]
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 příští lekci, Databáze v C# .NET - DataSet a SqlDataAdapter, si uvedeme odpojený přístup k databázi.
Stáhnout
Staženo 434x (35.38 kB)
Aplikace je včetně zdrojových kódů v jazyce C#
Komentáře


Zobrazeno 10 zpráv z 48. Zobrazit vše